0

別のページのコンテンツを取得したい。背景は、AJAXリクエストをしたかったのですが、Same Origin Policyこれができないためです。ここで、AJAX 要求を行う独自の PHP スクリプトを作成したいと考えました。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

fopencurlとで試してみました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

2 番目のコード ブロックに 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_replaceURL エンコードされた文字列を作成しました。後で使用しても、、、...urldecodeの URL が正しく生成されませんでした。curlfile_get_contents

正しい 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[コントローラー]=ファインダー&&cハッシュ=123456789001233455332

すなわちなし&、、、%23_%5B%5D

于 2013-03-29T15:39:17.193 に答える