2009-11-10 7 views
0

인라인 XML 데이터로 PUT 요청을 발행 할 수 없어서 컬에 문제가 있습니다. 어떻게 수행했는지 모르겠지만 몇 가지 방법으로 다른 기법을 사용하고 있습니다. . 우선은 PUT에 대한 기본 CURL 옵션으로 CURLOPT_UPLOAD를 사용하여 시도하고 수동으로 XML 데이터를 추가하려고 : CUrl PUT with xml 데이터

typedef map<string, string> headers_t; 
    std::string strCommand = <XMLCOMMAND> 

PUTRequest(param1, param2, ...) 
    { 
... 
    headers_t headers; 
    int nLen = strCommand.length(); 
    stringstream issLen; 
     issLen << nLen; 
     issLen >> strln; 
    curl_easy_setopt(curl, CURLOPT_UPLOAD, true); // HTTP PUT 
    headers.append("Content-Length: "+ strln); // 
    headers.append(strCommand); 
... 
    } 

가 그럼 난 같은 방법으로 시도를하지만 CURLOPT_POSTFIELDSCURLOPT_POSTFIELDSIZE를 사용하는 대신 수동으로 명령을 추가 HTTP 헤더 .... 작동하지 않았다.

그런 다음 CURLOPT_CUSTOMREQUEST 옵션을 사용하여 PUT 요청을 사용자 지정하고 PUT에 매개 변수를 설정하고 명령을 수동으로 추가하고 POSTFIELDS 메서드를 사용하여 시도했습니다.

슬프게도 아무도 작동하지 않으며 지금 나는 무엇을 시도 할 것인가에 관해서도 단서가 없습니다.

답변

3

CURLOPT_UPLOAD를 사용하는 경우 XML이 속한 본문이 아닌 요청의 헤더에 추가됩니다. curl이 요청할 때 XML 데이터를 제공하고 CURLOPT_INFILESIZE/CURLOPT_INFILESIZE_LARGE를 사용하여 적절한 'Content-Length'헤더를 생성 할 수 있도록 CURLOPT_READDATA (XML이 파일에없는 경우 CURLOPT_READFUNCTION과 함께)를 사용해야합니다 (해당 헤더를 수동으로 추가하십시오). 당신이 CURLOPT_POST를 사용하는 경우

후 실제 XML 데이터를 제공하는 CURLOPT_POSTFIELDS 및 CURL_POSTFIELDSIZE/CURLOPT_POSTFIELDSIZE_LARGE를 사용하지만, 당신은 또한 당신이 기본값에서 변경할 수 있도록 기본 '콘텐츠 유형'헤더를 대체 할 CURLOPT_HTTPHEADER을 사용해야합니다 'application/x-www-form-urlencoded'에서 'text/xml'로 변경하십시오.