Отправка POST с помощью PHP не работает с curl или file_get_contents, просто обычный bash CURL - PullRequest
1 голос
/ 25 ноября 2011

У меня серьезные проблемы с отправкой POST. Используя curl на оболочке, мой POST работает отлично. Однако при использовании PHP curl или file_get_contents он не работает вообще. Я получаю 500 ошибок от веб-сервера.

curl -X POST -H"Content-Type:application/xml" "http://myserver:8080/createItem?name=NewItem" --user root:123456 --data-binary @template.xml

А это:

$options = array(
    CURLOPT_HEADER => 1, 
    CURLOPT_HTTPHEADER => array("Content-Type:application/xml"),
    CURLOPT_URL => "http://myserver:8080/createItem?name=" . rawurlencode("NewItem"), 
    CURLOPT_FRESH_CONNECT => 1, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_FORBID_REUSE => 1, 
    CURLOPT_TIMEOUT => 20, 
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
    CURLOPT_USERPWD => "root:123456",
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => file_get_contents("template.xml"),
);

$post = curl_init(); 
curl_setopt_array($post, $options); 
if(!$result = curl_exec($post)) { 
    trigger_error(curl_error($post)); 
} 

curl_close($post); 

А это:

$context = stream_context_create(array(
    'http' => array(
        'method'  => 'POST',
        'header'  => sprintf("Authorization: Basic %s\r\n", base64_encode('root:123456')) . "Content-Type:application/xml",
        'timeout' => 20,
        'content' => file_get_contents("template.xml"),
    ),
));
$ret = file_get_contents("http://myserver:8080/createItem?name=" . rawurlencode("NewItem"), false, $context);

Я делаю здесь что-то нелепое и не вижу? Я не вижу причин для нормальной работы curl из оболочки, но не реализации PHP.

Ответы [ 3 ]

1 голос
/ 25 ноября 2011

Хм ... Я не думаю, что это возможно с php/curl, но попробуйте:

CURLOPT_POSTFIELDS => array('@template.xml'),
0 голосов
/ 25 ноября 2011

Согласно документации, заголовки здесь

'header'  => sprintf("Authorization: Basic %s\r\n", base64_encode('root:123456')) 
           . "Content-Type:application/xml",

должно заканчиваться на \ r \ n [см. пример 1 здесь]

'header'  => sprintf( "Authorization: Basic %s\r\n", base64_encode('root:123456')) 
           . "Content-Type: application/xml\r\n",
0 голосов
/ 25 ноября 2011

Это возможно, взгляните на это:

// same as <input type="file" name="file_box"><br /> $post = array(<br /> "file_box"=>"@/path/to/myfile.jpg",<br /> );<br /> curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

Источник: http://dtbaker.com.au/random-bits/uploading-a-file-using-curl-in-php.html

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