drnbotxo449747 2015-04-21 14:16
浏览 58

jQuery Ajax请求通过代理404'ing

I'm having some problems running a jQuery Ajax request through a proxy but I'm not sure what the problem is.

I have the following index.php code:

<div id="container">:(</div>

<form action="proxy.php" method="post">
    <input type="hidden" name="address"
        value="http://www.bungie.net/Platform/Destiny/2/Account/4611686018433330092/" />
    <input type="submit" name="submit" value="Submit" />
</form>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="js/destiny.js"></script>

This runs a short piece of jQuery (js/destiny.js):

$.ajax({
url: 'proxy.php',
type: 'POST',
dataType: "json",
data: {
    address: '/Platform/Destiny/2/Account/4611686018433330092/'
},
success: function(response) {
    console.log(response);
    // response now contains full HTML of google.com
    $("#container").html(':D');
},
error: function(req, status, errThrown){
    // error handling
    console.log("req: " + req);
    console.log("status: " + status);
    console.log("errThrown: " + errThrown);
}

});

My proxy.php is just the Google code PHP proxy, with the print line amended:

    <?php
/*
 * Author - Rob Thomson <rob@marotori.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 */

session_start();
ob_start();

ini_set('display_errors', 0);

/* config settings */
$base = "http://www.bungie.net";  //set this to the url you want to scrape
$ckfile = 'tmp/simpleproxy-cookie-'.session_id();  //this can be set to anywhere you fancy!  just make sure it is secure.

/* all system code happens below - you should not need to edit it! */

//work out cookie domain
$cookiedomain = str_replace("http://www.","",$base);
$cookiedomain = str_replace("https://www.","",$cookiedomain);
$cookiedomain = str_replace("www.","",$cookiedomain);

$url = $base . $_SERVER['REQUEST_URI'];

if($_SERVER['HTTPS'] == 'on'){
    $mydomain = 'https://'.$_SERVER['HTTP_HOST'];
} else {
    $mydomain = 'http://'.$_SERVER['HTTP_HOST'];
}

// Open the cURL session
$curlSession = curl_init();

curl_setopt ($curlSession, CURLOPT_URL, $url);
curl_setopt ($curlSession, CURLOPT_HEADER, 1);


if($_SERVER['REQUEST_METHOD'] == 'POST'){
    curl_setopt ($curlSession, CURLOPT_POST, 1);
    curl_setopt ($curlSession, CURLOPT_POSTFIELDS, $_POST);
}

curl_setopt($curlSession, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curlSession, CURLOPT_TIMEOUT,30);
curl_setopt($curlSession, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt ($curlSession, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($curlSession, CURLOPT_COOKIEFILE, $ckfile);

//handle other cookies cookies
foreach($_COOKIE as $k=>$v){
    if(is_array($v)){
        $v = serialize($v);
    }
    curl_setopt($curlSession,CURLOPT_COOKIE,"$k=$v; domain=.$cookiedomain ; path=/");
}

//Send the request and store the result in an array
$response = curl_exec ($curlSession);

// Check that a connection was made
if (curl_error($curlSession)){
    // If it wasn't...
    print curl_error($curlSession);
} else {

    //clean duplicate header that seems to appear on fastcgi with output buffer on some servers!!
    $response = str_replace("HTTP/1.1 100 Continue

","",$response);

    $ar = explode("

", $response, 2);

    $header = $ar[0];
    $body = $ar[1];

    //handle headers - simply re-outputing them
    $header_ar = split(chr(10),$header);
    foreach($header_ar as $k=>$v){
        if(!preg_match("/^Transfer-Encoding/",$v)){
            $v = str_replace($base,$mydomain,$v); //header rewrite if needed
            header(trim($v));
        }
    }

    //rewrite all hard coded urls to ensure the links still work!
    $body = str_replace($base,$mydomain,$body);

    #print $body;
    echo file_get_contents($_POST['address']);

}

curl_close ($curlSession);

?>

If I submit the test form on the index.php file I get the data no problem, but when running the same request through Ajax I get a 404. Is anybody able to show me the error of my ways?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 stata安慰剂检验作图但是真实值不出现在图上
    • ¥15 c程序不知道为什么得不到结果
    • ¥40 复杂的限制性的商函数处理
    • ¥15 程序不包含适用于入口点的静态Main方法
    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题