2011-09-02 2 views
2

이 옵션을 사용합니다 :헤더가있는 게시물 요청의 오류 411 (길이 필요), 헤더에 Content-Length가 있습니다. 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); 

헤더가있는 게시물 요청이어야합니다. 헤더 변수에는 길이가 있습니다

*** 
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> 

아마도 다른 CURL 옵션을 사용해야합니까?

업데이트 :

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

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

답변

2

이 오류는 YouTube에서받은 인증 문자열에 새 라인 기호가 있기 때문에 지울 수 있으며이 오류는 사라졌습니다.

+0

많은 시간을 절약 할 수 있습니다. 답변 해주셔서 감사합니다! –

+0

지구상의 무엇을 의미합니까? –

0

CURLOPT_POSTFIELDS를받을

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 

을 설정할 때. 그러나 이미 콘텐츠 길이 헤더 을 보내고 있으므로은 분명히 서버가 말하는 누락 된 길이가 아닙니다.

귀하의 요청은 또한 "연결 : 닫기"를 전송하므로 우리에게 보여주지 않은 코드가 더 있습니다.

+0

[수동] (http://code.google.com/apis/youtube/2.0/developers_guide_protocol_direct_uploading.html#Direct_uploading)이 그렇게했기 때문에했습니다. 게시물 헤더에서 내용 길이를 제거하면 결과는 동일합니다. – Alecs

관련 문제