2013-06-10 2 views
2

POST 데이터를 보낸 후 결과를 반환하는 API가 있습니다.보낼 방법 PHP에서 fopen을 사용하여 Accept Encoding 헤더

현재 저는 fopen을 사용하고 있습니다.

정확한 헤더를 보내면 API가 gzip 압축 결과를 반환합니다.

fopen을 사용하여 Accept Encoding 헤더를 보내려면 어떻게해야합니까?

는 현재, 관련 코드가 보이는 같은 : 쉽게 사람들이 그래서 헤더를 설정하고자 항상 압축 gzip을 스트림 또는 사람을 읽는 관련된 구글에서 발견되는 등

$params = array('http' => array( 
    'method' => 'POST', 
    'content' => $xml, 
    'header' => 'Content-type: application/x-www-form-urlencoded' . "\r\n", 
    'ignore_errors' => $ignoreErrors 
)); 

    $ctx = stream_context_create($params); 
    $fp = fopen($url, 'rb', false, $ctx); 

모든 예제/압축 된 데이터를 보낼 수 있습니다.

+0

왜 안 CURL을 사용하기 :

다음은 일을 했습니까? 'curl_setopt ($ curl, CURLOPT_ENCODING, 'gzip, deflate'); ' – Robert

+0

@Darren - www.php.net/stream_context_create - 여러 헤더를 보내는 방법에 대한 예제가 있습니다. 그 정보를 찾는 데 약 5 초가 걸리고, ** ** fopen이 아니라, 필요한 stream_context_create입니다. –

+0

@ 로버트 - 나는 CURL을 시도했다. curl_getinfo를 확인하면 압축 된 데이터를 전송하지 않는 것처럼 보입니다. 'content_type'=> string 'text/html; charset = iso-8859-1 '. –

답변

1

Accept-Encoding 헤더를 추가하려고 :

$params = array('http' => array( 
    'method' => 'POST', 
    'content' => $xml, 
    'header' => 'Content-type: application/x-www-form-urlencoded' . "\r\n" 
       .'Accept-Encoding:' . "\r\n" 
    'ignore_errors' => $ignoreErrors 
)); 

빈 값이 발생해야 인코딩하지 무엇을 의미하는지 identity과 동일합니다. 내가 링크 한 rfc를 참조하십시오.

그러나 원격 서버가이를 존중하는지 확신 할 수 없습니다.

+0

내가 질문을 한 이유는 API 제공 업체가 Accept-Encoding 헤더가 존중되지만 그럴 것 같지 않기 때문입니다. "Accept-Encoding : gzip, deflate"라고 말하도록 코드를 업데이트 한 후에도 여전히 데이터를 정상적으로 수신하고있는 것으로 보입니다. –

+0

'Accept-Encoding : identity' !! * Read * my answer :) – hek2mgl

+0

"코드를 업데이트 한 후에도"라고 말한 이유는 귀하의 방법을 시도했기 때문에 작동하지 않았기 때문에 다른 것을 시도해 보았고 어느 쪽도 효과가 없음을 알려주고있었습니다. –

0

"Accept-Encoding : gzip, deflate"를 헤더 매개 변수에 추가하십시오. 그리고 옵션 헤더를 연결하여 모두 보내야합니다. 현재는 대체하고 있습니다.

+0

$ optional_headers는 null이며 게시물에 대해 삭제하지 않은 항목과 관련이 있습니다. Accept-Encoding을 헤더에 추가하는 것은 아무 것도하지 않았고 게시하기 전에 시도했습니다. –

+0

나는 또한 시도했다 - http : // stackoverflow.com/questions/3800147/how-do-i-use-file-get-contents-to-get-a-gziped-on-a-remote-web-server-in-p –

+0

@DarrenS 다음 : cURL 확장으로 소비하는 API를 확인하고 올바른 인코딩 헤더를 설정하십시오. 그런 식으로 작동하는지 확인하십시오. 그것이 작동하지 않는다면, 나는 API 측에서 뭔가 잘못되었다고 생각할 것이다. 그리고 거기에 컬을 디버깅하는 옵션이 더 있습니다 : http://stackoverflow.com/questions/3757071/php-debugging-curl –

3

fopen/stream_get_contents를 사용하여 작동하지 못했습니다.

다른 제안 사항 중 하나에 따라 CURL을 시도했습니다. 피 가공 다음의 몇 가지 이유 없음에 대한

는 :

curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); 
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); 

또한 주어진 다른 제안의 일부를 시도했다.

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip')); 
+0

그게 curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ('Accept-Encoding : gzip')); 내 문제도 해결했다. 고맙습니다! – sd1sd1

관련 문제