2015-07-02 11 views
4

Использование почтальона, я отправить POST в (мое имя пользователя и пароль заполнены):POST работает на Postman, но не с CURL

https://ssl.reddit.com/api/login?api_type=json&user=XXX&passwd=XXX&rem=True 

я получаю ответ, содержащий modhash и печенье. Затем я посылаю вторую POST с почтальона:

https://en.reddit.com/api/comment?api_type=json&text=7/1/15TEST&thing_id=t1_csa56v2 

со следующими заголовками (XXX было подтверждено и заполнены):

User-Agent: XXX 
Cookie: reddit_session=XXX 
X-Modhash: XXX 

Это дает правильный ответ, но когда я пытаюсь сделать то же самое с CURL на моем PHP, он отвечает USER_REQUIRED. Еще раз, я подтвердил, что cookie и modhash верны.

$name = 't1_csa56v2'; 
$text = 'NEWEST TEST 7/2/15 12:20am'; 
$url = 'https://en.reddit.com/api/comment'; 

$modhash = 'XXX'; 
$cookie = 'XXX'; 

$headerFields = array (
    'User-Agent' => 'XXX', 
    'Cookie' => 'reddit_session='.$cookie, 
    'X-Modhash' => $modhash 
); 

$postFields = array (
    'api_type' => 'json', 
    'text' => $text, 
    'thing_id' => $name 
); 


$field_string = http_build_query($postFields); 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerFields); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 3); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $field_string); 
$response = curl_exec($ch); 

Что я делаю неправильно? Почему я не могу получить тот же ответ?

Скриншот POSTMAN: Screenshot of POSTMAN

+0

Вы отправляете имя пользователя и пароль в запрос с URL-адресом (например, отправляя запрос GET). С помощью Curl вы отправляете запрос POST. –

+0

@NeerajVerma О, извините, я забыл включить, что вы можете указать с почтальоном отправить POST – radleybobins

+1

Но просто указать отправить запрос POST недостаточно. Вам необходимо отправить данные POST. Но здесь вы отправляете данные по URL-адресу. –

ответ

3
<?php 
error_reporting(E_ALL); 
$name = 't1_csa56v2'; 
$text = 'NEWEST TEST 7/2/15 12:20am'; 
$url = 'https://en.reddit.com/api/comment'; 

$modhash = 'XXX'; 
$cookie = 'XXX'; 

$headerFields = array (
    'X-Modhash' => $modhash 
); 

$postFields = array (
    'api_type' => 'json', 
    'text' => $text, 
    'thing_id' => $name 
); 



$ch = curl_init($url); 
assert(curl_setopt_array($ch, 
array(
     CURLOPT_AUTOREFERER => true, 
     CURLOPT_BINARYTRANSFER => true, 
     CURLOPT_COOKIESESSION => true, 
     CURLOPT_FOLLOWLOCATION => true, 
     CURLOPT_FORBID_REUSE => false, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_SSL_VERIFYPEER => false, 
     CURLOPT_CONNECTTIMEOUT => 10, 
     CURLOPT_TIMEOUT => 11, 
     CURLOPT_ENCODING=>"", 
     CURLOPT_USERAGENT=>'XXX', 
     CURLOPT_COOKIE=>'reddit_session='.$cookie, 
     CURLOPT_HTTPHEADER=>$headerFields, 
     CURLOPT_POST=>true, 
     CURLOPT_POSTFIELDS=>$postFields, 
))); 
$response = curl_exec($ch); 

попробовать это .. не знаю точно, что вы делаете неправильно, но агент пользователя должен быть установлен с CURLOPT_USERAGENT, и куки должны быть установлены с CURLOPT_COOKIE и вы должны позволить curl закодировать его для вас, а не использовать http_build_query , и вы должны явно указать его на запрос POST, как его запрос GET по умолчанию. также должен включать сообщение об ошибке E_ALL

+0

Большое спасибо за ответ! Мне неожиданно пришлось ехать вчера и сегодня, я попробую ваши советы как можно скорее, когда вернусь. Просто не хотел, чтобы ты думал, что я игнорирую тебя! – radleybobins

+0

Спасибо за это, не смог сделать запрос добавленным пользователем и работал. –

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