PHP / cURL - сервер не получает данные POST - PullRequest
2 голосов
/ 25 января 2011

Я настраиваю тестовый сценарий клиент / сервер на моем локальном компьютере - у меня есть PHP-скрипт тестового клиента, который предназначен для отправки XML-RPC на PHP-скрипт сервера через cURL.

$cnxn = curl_init();

$log = fopen("/var/www/mobile-client.localhost/www/curl.log", "w");

curl_setopt_array($cnxn,
  array(
    CURLOPT_FRESH_CONNECT => false,
    CURLOPT_HEADER => false,
    CURLOPT_HTTPHEADER => array(
      "Content-Type: text/xml",
    ),
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => "m=boomshakalaka",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_STDERR => $log,
    CURLOPT_URL => "http://mobile-server.localhost/rpc/index.php",
    CURLOPT_VERBOSE => true,
  )
);

$response = curl_exec($cnxn);

echo "<pre>";
var_dump(curl_errno($cnxn) . ':' . curl_error($cnxn), "<hr>", $response);

fclose($log);
curl_close($cnxn);

Однако, когда сервер отвечает, возвращая содержимое массива POST (используя var_dump($_POST)), ответ становится пустым.

Содержимое файла журнала, который я создал в /var/www/mobile-client.localhost/www/curl.log, имеет следующее содержимое:

* About to connect() to mobile-server.localhost port 80 (#0)
*   Trying 127.0.0.1... * connected
* Connected to mobile-server.localhost (127.0.0.1) port 80 (#0)
> POST /rpc/index.php HTTP/1.1
Host: mobile-server.localhost
Accept: */*
Content-Type: text/xml
Content-Length: 15

< HTTP/1.1 200 OK
< Date: Tue, 25 Jan 2011 04:57:15 GMT
< Server: Apache/2.2.14 (Ubuntu)
< X-Powered-By: PHP/5.3.2-1ubuntu4.7
< Vary: Accept-Encoding
< Content-Length: 1337
< Content-Type: text/html
< 
* Connection #0 to host mobile-server.localhost left intact
* Closing connection #0

Я также отслеживал свой адрес обратной связи с помощью Wireshark и вижу следующее в журнале захвата:

POST /rpc/index.php HTTP/1.1
Host: mobile-server.localhost
Accept: */*
Content-Type: text/xml
Content-Length: 15

m=boomshakalaka

Куда исчезают мои данные POST?

Для тех, кто заинтересован в фактическом ответе сервера - содержимое index.php:

<?php

var_dump(":)");
var_dump("POST: ", $_POST);
var_dump("GET: ", $_GET);
var_dump("SERVER: ", $_SERVER);

Ответы [ 3 ]

5 голосов
/ 25 января 2011

Комментируя эту часть, нужно добиться цели:

/*
CURLOPT_HTTPHEADER => array(
    "Content-Type: text/xml",
),
*/

Редактировать ----

Вы не обязаны явно указывать тип контента. cURL установит его автоматически в зависимости от того, является ли CURLOPT_POSTFIELDS строкой (application/x-www-form-urlencoded) или массивом (multipart/form-data). Ссылка .

0 голосов
/ 20 января 2013

Если вы хотите сбросить содержимое cURL, перейдите с

var_dump( curl_getinfo( $cnxn, CURLINFO_HEADER_OUT ) );
0 голосов
/ 25 января 2011

Content-Type должен быть специально установлен на application/x-www-form-urlencoded (не text/xml)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...