简体   繁体   English

卷曲仅在终端中有效而不在php中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM