0

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

http://domain.com/subfolder/another_subfolder/index.php?id=1234&tx_manager_pi9[参数]=1&tx_manager_pi9[类别]=test&tx_manager_pi9[动作]=getInfos&tx_manager_pi9[控制器]=Finder&cHash=123456789001233455332

我用fopen,curl和试过了file_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 作为字符串而不是变量输入,我会得到一些结果!我认为和号&或方括号[]是问题,但我不能这么说。&应该保留,[]并且不是正确的 URL 参数。但是为什么直接输入起作用而不是变量呢?

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

我在这里看到了类似的问题(cURL 函数不起作用curl_setopt 不适用于 url 作为变量),但从未发布过真正的解决方案。

4

3 回答 3

1

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

于 2013-03-29T14:51:57.833 回答
1

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

如果其他一切都相同,您的浏览器和您列出的 PHP 函数应该返回相同的结果。

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

编辑:根据您提供的 URL,它对我来说工作正常:

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"
于 2013-03-29T14:59:46.920 回答
0

我的问题是我使用编码的 URL 作为起点。例如

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

我做了str_replace一个 URL 编码的字符串。即使urldecode之后使用,也没有为curl, file_get_contents, ...正确生成 URL

正确的 URL 应该是这样的

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[控制器]=Finder&&cHash=123456789001233455332

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

于 2013-03-29T15:39:17.193 回答