libcUrl Плохой запрос.Похоже, что тело POST не отправлено, только заголовок - PullRequest
0 голосов
/ 07 сентября 2011

Я использую эту опцию:

curl_easy_setopt(curl, CURLOPT_URL, urlUpload);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, body.length());
curl_easy_setopt(curl, CURLOPT_HEADER, 1);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body.c_str());

Я пытаюсь загрузить файл на Youtube, следуя их руководство , заголовок и тело моего запроса совершенно такие же, как в руководстве.

Я получаю Плохой запрос, подробный режим показывает следующее:

* About to connect() to uploads.gdata.youtube.com port 80 (#0)
*   Trying 74.125.XX.XXX... * connected
* Connected to uploads.gdata.youtube.com (74.125.XX.XXX) port 80 (#0)
> POST /feeds/api/users/default/uploads HTTP/1.1

Accept: */*

Host: uploads.gdata.youtube.com

Authorization: GoogleLogin    auth=D *** c

GData-Version: 2

X-GData-Key: key=A *** Q

Slug: screen.avi

Content-Type: multipart/related; boundary="d31fcjR2"

Content-Length: 910273

Connection: close

Expect: 100-continue



* Done waiting for 100-continue
< HTTP/1.1 400 Bad Request

< Server: Upload Server Built on Aug 29 2011 16:45:26 (1314661526)

< Content-Type: text/plain; charset=utf-8

< Date: Wed, 07 Sep 2011 12:57:51 GMT

< Pragma: no-cache

< Expires: Fri, 01 Jan 1990 00:00:00 GMT

< Cache-Control: no-cache, no-store, must-revalidate

< Content-Length: 11

< Connection: close

< 

* Closing connection #0

Кажется, что по какой-то причине тело вообще не было отправлено, может кто-то мне поможет?

ОБНОВЛЕНИЕ:

когда я отключаю Ожидайте: заголовок Я все еще получил неверный запрос.

* About to connect() to uploads.gdata.youtube.com port 80 (#0)
*   Trying 74.125.XX.XXX... * connected
* Connected to uploads.gdata.youtube.com (74.125.XX.XXX) port 80 (#0)
> POST /feeds/api/users/default/uploads HTTP/1.1

Accept: */*

Host: uploads.gdata.youtube.com

Authorization: GoogleLogin auth=D *** s

GData-Version: 2

X-GData-Key:    key=A *** Q

Slug: screen.avi

Content-Type: multipart/related; boundary="d31fcjR2"

Content-Length: 910273

Connection: close



< HTTP/1.1 400 Bad Request

< Server: Upload Server Built on Aug 29 2011 16:45:26 (1314661526)

< Content-Type: text/plain; charset=utf-8

< Date: Wed, 07 Sep 2011 13:59:38 GMT

< Pragma: no-cache

< Expires: Fri, 01 Jan 1990 00:00:00 GMT

< Cache-Control: no-cache, no-store, must-revalidate

< Content-Length: 11

< Connection: close

< 

* Closing connection #0

1 Ответ

1 голос
/ 08 сентября 2011

Моя ошибка была из-за ошибки в теле POST.Так что эта опция cUrl является правильным способом формирования запроса POST с заголовком.

...