检索另一个网站的内容

时间:2013-03-29 14:48:23

标签: php curl fopen file-get-contents

我想获取另一个页面的内容。背景是我想要发出一个AJAX请求,但由于Same Origin Policy我无法做到这一点。现在我想写一个自己的PHP脚本,我在其上发出AJAX请求。 URL如下所示:

  

http://domain.com/subfolder/another_subfolder/index.php?id=1234&tx_manager_pi9[parameter]=1&tx_manager_pi9[category]=test&tx_manager_pi9[action]=getInfos&tx_manager_pi9[controller]=Finder&cHash=123456789001233455332

我使用fopencurlfile_get_contents进行了尝试。没有任何作品。问题是我将URL作为字符串放入

$results = file_get_contents('http://domain.com/subfolder/another_subfolder/index.php?id=1234&tx_manager_pi9[parameter]=1&tx_manager_pi9[category]=test&tx_manager_pi9[action]=getInfos&tx_manager_pi9[controller]=Finder&cHash=123456789001233455332');

确实有效。如果我输入变量

$url = 'http://domain.com/subfolder/another_subfolder/index.php?id=1234&tx_manager_pi9[parameter]=1&tx_manager_pi9[category]=test&tx_manager_pi9[action]=getInfos&tx_manager_pi9[controller]=Finder&cHash=123456789001233455332';
$results = file_get_contents($url);

我走错了一页。使用特定参数我得到一个结果。如果未正确给出参数,我似乎进入默认页面。我无法理解它。

curl

相同
$curlSession = curl_init();
$options = array
(
    CURLOPT_URL=>$url,
    CURLOPT_HEADER=>false,
    CURLOPT_RETURNTRANSFER=>true,
    CURLOPT_FOLLOWLOCATION=>true
);
curl_setopt_array($curlSession,$options);
$results = curl_exec($curlSession);

这不起作用。如果我把URL作为字符串而不是变量我得到了一些结果!我认为&符&或方括号[]是问题,但我不能这样说。应保留&[]没有正确的网址参数。但是为什么直接输入工作而不是变量?

我使用了该变量,因为我使用str_replace进行了一些替换,我使查询更加灵活。

我在这里看到了类似的问题(cURL function not workingcurl_setopt doesnt work with url as a variable),但从未发布真正的解决方案。

3 个答案:

答案 0 :(得分:1)

您的第二个代码块中有一个,而不是;

答案 1 :(得分:1)

您是否需要“登录”到您正在访问的网站?这可以解释为什么它在您的浏览器中工作而不是通过您的服务器脚本。

如果其他所有内容相同,则您的浏览器和列出的PHP函数应返回相同的结果。

您能否提供我们测试的实际网址?

编辑:根据您提供的网址,我的工作正常:

php > $test = file_get_contents("http://www.domain.com/user/user_neu/index.php?id=16518&tx_stusermanager_pi9%5Bindications%5D=1&tx_stusermanager_pi9%5Bcategory%5D=cure&tx_stusermanager_pi9%5Baction%5D=getHousesByIndications&tx_stusermanager_pi9%5Bcontroller%5D=HouseFinder&cHash=88230660f01ads34d73a199b82e976");
php > var_dump($test);
string(29) "16,15,14,13,12,11,17,19,22"

答案 2 :(得分:0)

我的问题是我使用编码的URL作为起点。 E.g。

http://domain.com/subfolder/another_subfolder/index.php?id=1234&tx_manager_pi9%5Bparameter%5D=%23%23%23param1%23%23%23&tx_manager_pi9%5Bcategory%5D=%23%23%23param2%23%23%23&tx_manager_pi9%5Baction%5D=getInfos&tx_manager_pi9%5Bcontroller%5D=Finder&cHash=123456789001233455332

我在URL编码的字符串上创建了str_replace。即使后来使用urldecode,也未正确生成curlfile_get_contents,...

的网址

正确的网址应该是这样的

http://domain.com/subfolder/another_subfolder/index.php?id=1234&tx_manager_pi9 [参数] = ###的param1 ###&安培; tx_manager_pi9 [类别] = ### param2的###安培;&安培; tx_manager_pi9 [动作] = getInfos&安培; tx_manager_pi9 [控制器] =搜索&安培;&安培; cHash = 123456789001233455332

即。没有&%23%5B%5D