У меня есть следующая функция PHP:
function checkJQL($filter) {
$auth = "account:password";
$URL='http://jira/rest/api/latest/search?jql='.$filter;
echo $URL;
// Initiate curl
$ch = curl_init();
// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//Tell it to always go to the link
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// Will return the response, if false it print the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Set the url
curl_setopt($ch, CURLOPT_URL,$URL);
//Set username and password
curl_setopt($ch, CURLOPT_USERPWD, $auth);
// Execute
$result=curl_exec($ch);
// Closing
curl_close($ch);
echo $result;
// Will dump a beauty json :3
var_dump(json_decode($result, true));
echo "DONE";
}
Когда я звоню это с $filter = ""
Работает нормально, выводит все. Как только я вставляю правильный запрос JQL, он терпит неудачу. Когда я ввожу случайный мусор, он работает (как, например, я получаю неверное входное сообщение), но когда это правильный JQL, он никогда не работает.
Когда я копирую и вставляю URL, который я отображаю в браузере, он работает.
Пример фильтра, который я использовал:
«Target» = «Бла»
Когда я думаю об этом, мне на самом деле не нужно, чтобы это работало, мне просто нужно знать, когда ввод не JQL (что он делает). Но мне сейчас очень любопытно. У кого-нибудь есть идеи о том, что это может быть?
Вы должны URL-кодировать $filter
,
Причина, по которой он работает с пустыми или случайными строками, заключается в том, что в них нет сложных символов, которые необходимо кодировать в URL.
Причина, по которой URL работает в браузере, но не в скрипте, заключается в том, что браузер выполняет кодировку URL.
Так что сделайте следующее:
$URL='http://jira/rest/api/latest/search?jql='.urlencode($filter);
Ссылка на urlencode: http://php.net/manual/en/function.urlencode.php
Других решений пока нет …