2011-09-02 24 views
2

我用這個選項:錯誤411(長度要求)在具有標題的發佈請求中,但標題具有內容長度。 libcurl的

curl_easy_setopt(curl, CURLOPT_URL, urlUpload); 
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer); 
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body.c_str()); 
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header); 

它必須與報頭POST請求。而在頭變量有長度

*** 
char sizeStr[50]; 
sprintf(sizeStr, "Content-Length: %d", body.length()); 

*** 

header = curl_slist_append(header, sizeStr); 

*** 

我試圖做的是將視頻上傳到YouTube,我使用their manual

我收到這樣的錯誤。

<!DOCTYPE html> 
<html lang=en> 
<meta charset=utf-8> 
<title>Error 411 (Length Required)!!1</title> 
<style> 
    *many symbols here* 
</style> 
<a href=//www.google.com/ id=g><img src=//www.google.com/images/logo_sm.gif alt=Google></a> 
<p><b>411.</b> <ins>Thatв€™s an error.</ins> 
<p>POST requests require a <code>Content-length</code> header. <ins>Thatв€™s all we know.</ins> 

也許我必須使用一些其他的CURLoptions?

UPDATE: 當我設置

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 

我也收到

* 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=DQAAAIkAAACTK9tZPCTY1XQvXGkg4qkaIuZ1QO-Bh6- ZyzOHuigFNC_gR4Piep4NljAjdOP4s-k7vqj-j4LdckXM9jxzlElgtaxr- CShI1vIWkjm5ZtFsj3a9v1YqFmjIkEi3NCP2ON18D9jmXSIarPqprWiOK0n3oxznCBhm4osXwJ1yRstVVM5bG5mOlC331eMCrOKp3E 


GData-Version: 2 

X-GData-Key:  key=AI39si59VMkm6DATDmfG_Df6D23jfto3xRVfbAEMrFBv035pdRZ5AYMPsRXbGLCRXXnK5jz6KCSWSkuXOTrlDIIKWy7Le9fkQQ 

Slug: screen.avi 

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

Content-length: 910273 

Connection: close 


* HTTP 1.0, assume close after body 
< HTTP/1.0 411 Length Required 

< Content-Type: text/html; charset=UTF-8 

< Content-Length: 11791 

< Date: Fri, 02 Sep 2011 16:09:58 GMT 

< Server: GFE/2.0 

< 

* Closing connection #0 
+0

+1 for curl_easy_setopt(curl,CURLOPT_VERBOSE,1L); – PCoder

回答

2

這個錯誤是因爲我從YouTube收到的驗證字符串最後是新行符號,我將其刪除,此錯誤消失。

+0

爲我節省了大量時間。感謝你的回答! –

+0

這意味着什麼? –

0

CURLOPT_POSTFIELDS將使內容長度得到由libcurl的自動添加,沒有必要作出一個自定義。但是,由於您已經發送了內容長度標頭,因此顯然不是服務器正在討論的缺失長度。

您的請求還會發送一個「Connection:close」,所以還有更多的代碼沒有顯示給我們。

+0

我這樣做是因爲[手動](http://code.google.com/apis/youtube/2.0/developers_guide_protocol_direct_uploading.html#Direct_uploading)說要這樣做。當我從帖子標題中刪除內容長度時,結果相同 – Alecs

相關問題