Thanks. It doesn't look like adding the content-length helped. Still 
getting 400 errors. And I just noticed that in Google's example there is no 
content-length header for a GET request. Don't know what else to try now.

On Tuesday, September 18, 2018 at 1:06:23 PM UTC-4, Dan Book wrote:
>
> These "parts" are essentially embedded HTTP requests; the lines under each 
> listed GET/PUT/etc are headers for that embedded request. Here is the 
> structure of their example annotated:
>
> POST /batch/farm/v1 HTTP/1.1 # actual request and headers
> Authorization: Bearer your_auth_token
> Host: www.googleapis.com
> Content-Type: multipart/mixed; boundary=batch_foobarbaz
> Content-Length: total_content_length
> # rest is actual request content
> --batch_foobarbaz # first multipart segment
> Content-Type: application/http # multipart segment headers
> Content-ID: <item1:[email protected] <javascript:>>
>
> GET /farm/v1/animals/pony # multipart segment *content*
>
> --batch_foobarbaz # second multipart segment
> Content-Type: application/http # multipart segment headers
> Content-ID: <item2:[email protected] <javascript:>>
>
> PUT /farm/v1/animals/sheep # multipart segment *content*
> Content-Type: application/json
> Content-Length: part_content_length
> If-Match: "etag/sheep"
>
> {
>   "animalName": "sheep",
>   "animalAge": "5"
>   "peltColor": "green",
> }
>
> --batch_foobarbaz # third multipart segment
> Content-Type: application/http # multipart segment headers
> Content-ID: <item3:[email protected] <javascript:>>
>
> GET /farm/v1/animals # multipart segment *content*
> If-None-Match: "etag/animals"
>
> --batch_foobarbaz--
>
> As noted the part where the part_content_length is is inside the content 
> for one of the multipart segments. Mojolicious doesn't have anything to 
> deal with the content of multipart segments of this type, so you need to 
> construct them yourself, but you could maybe leverage Mojolicious's 
> existing ability to construct such HTTP requests.
>
> my $embedded_tx = $ua->build_tx(PUT => '/farm/v1/animals/sheep', 
> {'If-Match' => 'etag/sheep'}, json => $sheep_data);
> ...
> my $multipart_tx = $ua->post('/batch/farm/v1' => $headers => multipart => [
>   {content => $embedded_tx->req->to_string, 'Content-Type' => 
> 'application/http'},
>   ...
> ]);
>
> Hope that helps,
> -Dan
>
> On Tue, Sep 18, 2018 at 12:50 PM Steve Dondley <[email protected] 
> <javascript:>> wrote:
>
>> I'm starting a new thread related to the previous one regarding making a 
>> batch api request to Google's API. I keep getting "Bad Reqeust" responses 
>> from Google after making a batch API call (other calls work fine).
>>
>> Looking at the api documentation for batch api requests 
>> <https://developers.google.com/gmail/api/guides/batch> it says each part 
>> of the multipart request should have a content length. Here is the example 
>> Google supplies:
>>
>> POST /batch/farm/v1 HTTP/1.1
>> Authorization: Bearer your_auth_token
>> Host: www.googleapis.com
>> Content-Type: multipart/mixed; boundary=batch_foobarbaz
>> Content-Length: total_content_length
>>
>> --batch_foobarbaz
>> Content-Type: application/http
>> Content-ID: <item1:[email protected] <javascript:>>
>>
>> GET /farm/v1/animals/pony
>>
>> --batch_foobarbaz
>> Content-Type: application/http
>> Content-ID: <item2:[email protected] <javascript:>>
>>
>> PUT /farm/v1/animals/sheep
>> Content-Type: application/json
>> Content-Length: part_content_length
>> If-Match: "etag/sheep"
>>
>> {
>>   "animalName": "sheep",
>>   "animalAge": "5"
>>   "peltColor": "green",
>> }
>>
>> --batch_foobarbaz
>> Content-Type: application/http
>> Content-ID: <item3:[email protected] <javascript:>>
>>
>> GET /farm/v1/animals
>> If-None-Match: "etag/animals"
>>
>> --batch_foobarbaz--
>>
>>
>>
>> The requests I'm generating with mojolicious do not have the 
>> "part_content_length." Here's mine:
>>
>> POST /batch/gmail/v1 HTTP/1.1
>> Authorization: Bearer A_REAL_TOKEN_GOES_HERE
>> Host: www.googleapis.com
>> Accept-Encoding: gzip
>> Content-Length: 120
>> User-Agent: Mojolicious (Perl)
>> Content-Type: multipart/mixed; boundary=nS2CX
>>
>>
>> --nS2CX
>> Content-Type: application/http
>>
>>
>> GET /gmail/v1/users/[email protected]/messages/165eb111fcf21503
>> --nS2CX--
>>
>>
>>
>> My question is, does Mojolicious provide a way to automatically generate 
>> a content length header for these parts? If not, which parts of the message 
>> get counted toward this length and how do I calculate it (assuming UTF-8)?
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Mojolicious" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/mojolicious.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to