[英]Curl only works in terminal not in php
Just a simple script to curl to a website to take some data for my hobby project. 只是一个简单的脚本,可以卷曲到网站上以获取我的爱好项目的一些数据。 In terminal it works perfectly but with php it doesnt work at all. 在终端中,它可以正常工作,但与php完全不起作用。 I think it has to do with the cookies 我认为这与饼干有关
$ch = curl_init(); $ ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.pokemongomap.info/includes/mapdata.php");
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, 'fromlat=52.352772543694165&tolat=52.353516320168715&fromlng=6.672205448722025&tolng=6.6761080628386935&fpoke=1&fgym=1');
curl_setopt($ch,CURLOPT_HTTPHEADER, array(
'Pragma: no-cache',
'Origin: http://www.pokemongomap.info',
'Accept-Encoding: gzip, deflate',
'Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
'Accept: application/json, text/javascript, */*; q=0.01',
'Cache-Control: no-cache',
'Cookie: PHPSESSID=5q2naanh8gj85utl2m96erjfa3; __atssc=reddit%3B1; cookieconsent_dismissed=yes; __atuvc=4%7C33%2C1%7C34; _ga=GA1.2.1355385211.1471162927; latlngzoom=19[##split##]52.35314443349598[##split##]6.674156755780354',
'X-Requested-With: XMLHttpRequest',
'Connection: keep-alive',
'Referer: http://www.pokemongomap.info/'
));
curl_setopt($ch, CURLOPT_VERBOSE, true);
$output = curl_exec($ch);
if ($output === FALSE) {
printf("cUrl error (#%d): %s<br>\n", curl_errno($ch),
htmlspecialchars(curl_error($ch)));
}
curl_close($ch);
var_dump($output);
returns string(145) " ] D )j Ûi Ѡ+4 ߅z d紨)=qW +G Am~ f;c 6v ^ nG u JF ǜ { T .9 s =m 9G GFU % [ / r3|l# 7 H ) " 返回字符串(145)“ ] D )j Ûi Ѡ+4 zz d紨)=qW +G Am〜 f; c。 6v ^ nG uJF ǜ { T .9 s = m9G GFU % [ / r3| l# 7 ``H )。''
when using json_decode it returns NULL. 使用json_decode时,它返回NULL。
According to PHP manual for curl_setopt , the second parameter should to be a int or a constant option. 根据PHP的curl_setopt手册 ,第二个参数应为int或常量选项。 Try the code below: 请尝试以下代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.pokemongomap.info/includes/mapdata.php");
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, 'fromlat=52.352772543694165&tolat=52.353516320168715&fromlng=6.672205448722025&tolng=6.6761080628386935&fpoke=1&fgym=1');
curl_setopt($ch,CURLOPT_HTTPHEADER, array(
'Pragma: no-cache',
'Origin: http://www.pokemongomap.info',
'Accept-Encoding: gzip, deflate',
'Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
'Accept: application/json, text/javascript, */*; q=0.01',
'Cache-Control: no-cache',
'Cookie: PHPSESSID=5q2naanh8gj85utl2m96erjfa3; __atssc=reddit%3B1; cookieconsent_dismissed=yes; __atuvc=4%7C33%2C1%7C34; _ga=GA1.2.1355385211.1471162927; latlngzoom=19[##split##]52.35314443349598[##split##]6.674156755780354',
'X-Requested-With: XMLHttpRequest',
'Connection: keep-alive',
'Referer: http://www.pokemongomap.info/'
));
curl_setopt($ch,CURLOPT_ENCODING , "");
curl_setopt($ch, CURLOPT_VERBOSE, true);
$output = curl_exec($ch);
if ($output === FALSE) {
printf("cUrl error (#%d): %s<br>\n", curl_errno($ch),
htmlspecialchars(curl_error($ch)));
}
$info = curl_getinfo($ch);
var_dump ($info);
curl_close($ch);
var_dump(json_decode($output));
I also changed your final execution to get the curl errors and curl_info, since you are using verbose mode, it will help to define what is wrong with your request. 我还更改了最终执行以获取curl错误和curl_info,因为您使用的是详细模式,这将有助于定义您的请求出了什么问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.