2016-01-25 3 views
0

Я пытаюсь отправить данные HTTP с CURL в файл PHP, код не отправляет данные.HTTP сообщение от CURL - PHP

$url= 'http://www.example.com/test.php?' ; 
$msg= 'p1=1234&p2=1234&p3=1234' ; 

    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL,$url); 
    curl_setopt($curl, CURLOPT_POST, 1); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $msg); 

    curl_exec ($curl); 
    curl_close ($curl); 
+0

Какая ошибка у вас? Какой результат вы ожидаете? Откуда вы знаете, что он не отправляет данные? – Ben

+0

Не получается ошибка, просто строка не отправлена ​​ –

+0

Существует множество вопросов вроде этого ... Например [это] (http://stackoverflow.com/questions/2138527/php-curl-http-post-sample- код? RQ = 1). – Smar

ответ

0

Вам необходимо отправить почтовые поля в виде массива, а не в виде строки запроса «GET»:

$msg = [ 
'p1' => '1234', 
'p2' => '1234', 
'p3' => '1234', 
]; 

Если вы хотите отправить это как одно сообщение вы можете отправить массив с одним значение:

$msg = ['msg' => 'some_message']; 

Если вы хотите отправить запрос GET, добавьте вашу строку запроса в URL:

curl_setopt($curl, CURLOPT_URL, $url.$msg); 

В будущем вы можете получить отладочную информацию, используя этот код:

$result = curl_exec($curl); 
echo 'curl_error: '; 
var_dump(curl_error($curl)); 
echo '<br /><br /> curl_result: '; 
var_dump($result); 
curl_close($curl); 
+0

Спасибо, вы решили аналогичную проблему в другом PHP-файле, создав массив. пробовал и работает. Что касается случая здесь, можно ли отправлять как одно сообщение, а не как массив? –

+0

@ пользователь1570701 добро пожаловать. Я отредактировал свой ответ. – Alan

0

Пожалуйста, вы можете попробовать этот код?

$requestBody can be an array, querystring, json or else according to your request headers and the request handler which will recieve your http request.

contents of the test-curl.php:

<?PHP 
error_reporting(); 
ini_set('display_errors', 'On'); 

function makeRequest($url, $requestBody) 
{ 
    $handle = curl_init(); 
    $headers = array(); //array of request headers 
    //Example headers for standart browser request 
    //$headers = array(
    // 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'); 

    curl_setopt($handle, CURLOPT_URL, $url); 
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($handle, CURLOPT_POST, 1); 
    curl_setopt($handle, CURLOPT_POSTFIELDS, $requestBody); 
    curl_setopt($handle, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($handle, CURLOPT_HEADER, 1); //This means include headers in response 

    $result = curl_exec($handle); 
    $header_size = curl_getinfo($handle, CURLINFO_HEADER_SIZE); 
    $responseHeaders = substr($result, 0, $header_size); 
    $responseBody = substr($result, $header_size, strlen($result) - $header_size); 
    $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); 
    if ($httpCode == 200) 
     return $responseBody; 
    else 
     throw new Exception($responseBody); 
} 

$method = $_SERVER["REQUEST_METHOD"]; 

if ($method == "GET") { 

    $request = array(); 
    $request["a"] = "1"; 
    $request["b"] = "3"; 
    $request["c"] = "4"; 
    $request["d"] = "7"; 
    //$request = "a=1&b=3&c=4&d=7"; //This is the same with array version for standart post request. 
    $response = makeRequest("http://localhost/test-curl.php", $request); 
    echo $response; 
} else { 
    print_r($_POST); 
} 
?> 

Если вы запустите тест-curl.php с http://localhost/test-curl.php URL будет сделать пост запрос на себя, и вы увидите print_r вывод $ Массив _POST. Что-то вроде ниже;

Array ([a] => 1 [b] => 3 [c] => 4 [d] => 7)

Надеюсь, это вам поможет.

+0

Я переименовал $ requestBody в $ msg, чтобы сохранить универсальность с переменными, makerequest ($ url, $ msg); получил: \t PHP Фатальная ошибка: Uncaught исключение 'Exception' в C: \ Inetpub \ WWW \ example.com \ httpdocs \ test.php: 84 Стек след: # 0 C: \ Inetpub \ WWW \ пример .com \ httpdocs \ test.php (59): makeRequest ('http://www.example.com/test.php?', 'p1 = 1234 & p2 = 1234 & p3 = 1234') # 1 {main} inrown inC : \ Inetpub \ www \ example.com \ httpdocs \ test.php в строке 84 Sağol;) –

+0

Я изменил свой ответ, чтобы отладить себя. Если метод завершает исключение, поскольку вы видите конец метода makeRequest, код ответа не равен 200, что означает «ОК». Пожалуйста, проверьте мой измененный ответ. И обратите внимание, что вы должны предоставить полный URL-адрес, а не относительный. @ user1570701 –

+0

Cihan Bey, я использую настоящее доменное имя во время тестирования. Однажды я написал полное доменное имя, и некоторый хакер начал пинговать сервер до тех пор, пока сервер не рухнул. С тех пор я боюсь публиковать настоящие доменные имена. Я могу отправить вам доменное имя в частном порядке, а не публично. Я пытаюсь сделать это, я уверен, что мне не хватает какой-то глупой точки. –

Смежные вопросы