2013-07-18 5 views
0

CURL을 사용하여 원격 서버에 HTTP POST 요청을 보내는 간단한 PHP 스크립트가 있습니다.서버가 POST 요청에 응답하지 않습니다. CURL + PHP

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://91.250.77.10/test.php'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array('a' => 'b')); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$contents = curl_exec($ch); 
$error = curl_error($ch); 
curl_close($ch); 
if ($error) 
    echo $error; 
else 
    echo $contents; 

이렇게하면 "서버에서 응답 없음"오류가 발생합니다. 요청을 원격 서버의 액세스 로그에서도 찾을 수 없습니다! 나는 다음 쿼리 문자열, 즉 :

curl_setopt($ch, CURLOPT_POSTFIELDS, '&a=b'); 

로 postfields를 보내는 경우

은 무엇보다, 모든 것이 괜찮습니다.

원격 서버의 Apache 또는 PHP 구성에 문제가있는 것 같습니다. 어떤 힌트?

편집 : 설정시 다중/폼 데이터를 (CURL 그 유형을 사용 : 지금으로

, 그것은 콘텐츠 형식으로 요청 수용 (또는 올바르게 처리)하지 않는 서버처럼 보인다 배열을 포스트 필드로 설정했지만 문자열을 설정할 때는 그렇지 않습니다.)

요청이있는 파일을 보내야하므로 multipart/form-data를 사용해야합니다. 그렇다면이 서버를 올바르게 처리하는 방법은 무엇입니까?

답변

0

CURLOPT_POSTFIELDS에 배열을 전달하면 양식은 multipart/form-data으로 제출됩니다. 원격 장치가이 인코딩 유형을 허용하지 않을 수 있습니다.

+0

'CURLOPT_POSTFIELDS는 [...]이 매개 변수는 하나 'para1 = VAL1 & para2 = val2만큼 및 같은를 urlencoded 문자열로 전달 될 수있다 .. . "또는 필드 이름이 키이고 값이 필드 데이터 인 배열로 참조하십시오. http://www.php.net/manual/en/function.curl-setopt.php – Eleazan

+0

@ Eleazan Thanks correct – DevZer0

+0

그것은 내가 curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ('Content-Type : multipart/form-data'))로 테스트했을 때 문제가 아니었다. –

0

POST 요청을하는 가장 좋은 방법은 이와 같이 postFields를 형식 지정하는 것입니다.

VARIABLE = VALUE&으로 분리되어있다.

TIP :

$postFields = 'var1=cons1&var2=cons2&var3=cons3&var4=cons4&var5=cons5'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://91.250.77.10/test.php'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields; 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$contents = curl_exec($ch); 
$error = curl_error($ch); 
curl_close($ch); 
if ($error) 
    echo $error; 
else 
    echo $contents; 

더 이상 도움을 기쁘게 할 것이다.

+0

파일 업로드는 어떻습니까? –

+0

@ThomasLeu ... 문제가 아니어야합니다. 'curl_setopt ($ ch, CURLOPT_POSTFIELDS, Array ('file'=> $ filename)); 또는 위에서 설명한 것과 같은'var = val'을 사용합니다. – Black0CodeR

+0

콘텐츠 유형이 'application/x-www-form-urlencoded'인 파일을 보낼 수 있다는 의미입니까? 그렇다면 어떻게 말해주십시오. –

0

HTTP 헤더에 "Expect : 100-Continue"필드가 포함되어 있는지 확인하십시오. 일부 서버는이 필드를 처리하지 않고 기다립니다. 당신은 시도 할 수 있습니다 :

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: ')); 

자세한 내용은 pls 참조 : curl http 100 continue and multipartform-data post

+0

그 중 하나가 작동하지 않았다 :-( –

관련 문제