2015-04-22 24 views
0

Я работаю над скриптом PHP, который должен подключаться к REST API. Поставщик API предложил использовать cURL. Они дали мне пример того, как использовать его в командной строке:Параметры командной строки cURL в PHP

curl -D- -u "user:password" -X GET -H "Content-Type: application/json" http://example.com/api/searchFunction?jql=assignee=user1 

РНР скрипт выглядит следующим образом:

<?php 

$defaults = array(
CURLOPT_HEADER => true, 
CURLOPT_URL => 'http://example.com/api/searchFunction?jql=assignee=user1', 
CURLOPT_USERPWD => "user:password", 
CURLOPT_HTTPAUTH => 'CURLAUTH_BASIC' 
); 

$ch = curl_init(); 
curl_setopt_array($ch, ($defaults)); 

echo "cURL output: ".curl_exec($ch); 

curl_close($ch); 

?> 

Как вы можете себе представить, версия командной строки работает нормально, но в в версии PHP я получил следующую ошибку:

Field 'assignee' does not exist or this field cannot be viewed by anonymous users. 

Это говорит о том, что валидация входа в систему не работает. Однако пользователь и пароль верны.

Я искал уже ответные сообщения эквивалентов параметров cURL между версией командной строки и версией PHP, но не смог найти правильные параметры для версии PHP.

+2

'? Jql = assignee = user1' - что это должно быть? Может ли быть опечатка? –

+0

[link] (http://stackoverflow.com/a/17991852/4815044) Возможно, этот ответ на аналогичный вопрос может вам помочь. urlencode переменная jql? –

ответ

2

Вы еще не полностью скопировали команду cURL.

Для начала вы никогда не устанавливали опцию заголовка Content-Type: application/json. Вы должны установить это, используя опцию CURLOPT_HTTPHEADER.

Во-вторых, в командной строке cURL и PHP cURL используются разные значения User-Agent.

Рассмотрите возможность использования расширенной опции cURL командной строки, чтобы вы могли видеть всю передаваемую информацию, а затем реплицировать ее на PHP.

+0

Вы были правы. Добавление -v в cl-скрипт дало мне заголовки запроса и ответа. Я пропускал это: $ заголовков = массив ( 'Content-тип:/JSON', \t 'Авторизация: Basic AAABBBCCCRandomString' ); CURLOPT_HTTPHEADER => $ headers. И это нормально работает без определенного user_agent – Pipe2290

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