php - 执行 cURL 后的脚本不起作用。页面不断重新加载

标签 php javascript post curl request

这些是我想要执行的步骤:

  1. 获取http://www.skyscanner.es/的HTML代码、航类搜索。
  2. 仅获取该 HTML 的一部分:具有价格的特定“范围”。
  3. 用它来操作。

这是我所做的 PHP 代码:

    <?php
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://www.skyscanner.es/");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_POST, 1);
        curl_setopt ($ch, CURLOPT_POSTFIELDS, "from=Bilbao (BIO)&to=Barcelona (BCN)&depdatetext=25/03/2013&sc_returnOrOneWay=2");
        $output = curl_exec($ch);
        curl_close($ch);
        echo $output;
    ?>

但是我得到一个像这样的奇怪字符串:

     ‹¥TkoÚ0ý^‰ÿpTi“ê< t%<¤RuR»U+{}4ñ…X5qf›×Pÿûì$ZõÛ‚Äu¬sî=çú:ýÓ믣Éï‡1¤f!àáû§»Ï#ðHül‚àzr ¿n'÷wù!<Åã/x©1yëõÚ_·}©æÁä[°qY"G«–DŸæ 'ý¢Êf!2=x#CÔívKb FÊ\\ ¡àÐÿ,ùjàdf03d²Íу¤|x7&pì$)UÍ€kI®®:]yKe¸8¼;@àv2y€ª),520h’ Ö`R®!§s3i€ !×Èü~Pòm"m¶ÁXUÝDëBô)!“©dÛÝ‚ª9Ïâ°7³‰æ1ö?à¢|ÑÛø*F3z§ânQ¬ÐðÄîhši¢QñYoJ“§¹’ËŒÅÍqñôž'3Ž‚Y“»œ2ƳyBÔÉ7…îÏ®zÏÐ8I£Ý¡~Ë¿°ja‰RÅÍ››—/m!£BêkähÚ§ÌÛ~nÐEýÐýö´0¬iMw¨¨vkÎLw/ÏêeoæÒ&iA^ôÌ3 §Ë$E÷Þ9Ô=<êØ‘3{uûHµß)gºYMÏî…[1—š.³X¡ †¯Ð¡ý M\¤<³FŽÏÆ•{mŒ™ÇWö0öÆ\{ÞÎNˆ  ­bµ¿nœ\d|œÙ›SôÐöÓhøˆÊÎ0Œ•’Ê2¢a?°°ct¥ÙM'›‰ Z×û/6á~¦úië?®Š%—IÚÃIŠ%h+—@‚òÉöfRAB3Gœ"0®sA·¶Àj+Í€g+*8ûH%ƒwµ”÷°¦ú Ç\ä¦ÒåÊ·¿Aí¨îK÷m-¾vñà-ú¡ 

所以,我连第一步都没有迈过!

我尝试通过多种方式修复它,但我还不知道我做错了什么。我想这可能是:

请问有人可以帮助我吗?

提前致谢!

已编辑:我更改了标题,更接近我现在遇到的问题。

最佳答案

正文中编码什么消息并不重要,因为您收到的是:

不允许 HTTP/1.1 405 方法

这意味着您不能使用POST

如果您阅读响应的所有 header ,您会看到其中一个 header 显示:

Allow: GET, HEAD, OPTIONS, TRACE

如果您要删除这两行:

curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "from=Bilbao (BIO)&to=Barcelona (BCN)");

并更改:

curl_setopt($ch, CURLOPT_URL, "http://www.skyscanner.es/");

进入:

curl_setopt($ch, CURLOPT_URL, "http://www.skyscanner.es/vuelos/bio/bcn/130325/tarifas-de-bilbao-a-barcelona-en-marzo-2013.html");

它会起作用的。

检查以下代码:

<?php

    $accept = array(
        'type' => array('application/rss+xml', 'application/xml', 'application/rdf+xml', 'text/xml'),
        'charset' => array_diff(mb_list_encodings(), array('pass', 'auto', 'wchar', 'byte2be', 'byte2le', 'byte4be', 'byte4le', 'BASE64', 'UUENCODE', 'HTML-ENTITIES', 'Quoted-Printable', '7bit', '8bit'))
    );
    $header = array(
        'Accept: '.implode(', ', $accept['type']),
        'Accept-Charset: '.implode(', ', $accept['charset']),
    );
    $encoding = null;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.skyscanner.es/vuelos/bio/bcn/130325/tarifas-de-bilbao-a-barcelona-en-marzo-2013.html?flt=1");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//    curl_setopt ($ch, CURLOPT_POST, 1);
//    curl_setopt ($ch, CURLOPT_POSTFIELDS, "from=Bilbao (BIO)&to=Barcelona (BCN)");
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $response = curl_exec($ch);
    curl_close($ch);        
    if (!$response) {
        // error fetching the response
    } else {
        echo $response;
    }
?>

关于php - 执行 cURL 后的脚本不起作用。页面不断重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14863632/

相关文章:

javascript - 从 HTML 表单发布 JS 变量

php - 触发器还是 PHP 脚本?

php - Hidden Div 没有隐藏在 3g 网络上,但在 wi-fi 上工作正常

javascript - Firebase Cloud Functions 有时直到函数结束才执行

javascript - 如何通过drive api从google导出工作簿的所有工作表

Java - 在帖子后读取cookie

ios - 将 JSON 从 iOS 发布到 ASP.NET

php - FFMPEG 与 PHP 不执行?

javascript - 无法让 tampermonkey 脚本工作

javascript - 当我在 jmeter 中使用带有脚本的 Beanshell Sampler 时出现错误