AJAX-запрос возвращает «Неверный параметр», запрос работает без прокси - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь сделать ajax-запрос на чтение XML с сервера. Я использую прокси для этого. Если я ввожу запрос непосредственно в браузере, он возвращает правильный XML. Когда я использую свой прокси, он возвращает «Неверный параметр». Есть идеи?

Proxy.PHP

<?php
$c = file_get_contents((urldecode($_REQUEST['u'])));
$content_type = 'Content-Type: text/plain';
for ($i = 0; $i < count($http_response_header); $i++) {
    if (preg_match('/content-type/i',$http_response_header[$i])) {
        $content_type = $http_response_header[$i];
    }
}
if ($c) {
    header($content_type);
    echo $c;
}
else {
    header("content-type: text/plain");
    echo 'There was an error satisfying this request.';
}
?>

Запрос:

$.ajax({
        type: "GET",
        url:  'proxy.php?u=' + 'http://192.168.100.147:8080/thredds/sos/cfpoint/timeSeriesProfile-Ragged-MultipeStations-H.5.3/timeSeriesProfile-Ragged-MultipeStations-H.5.3.nc?request=GetObservation&service=SOS&version=1.0.0&responseFormat=text%2Fxml%3B%20subtype%3D%22om%2F1.0.0%22&offering=urn:tds:station.sos:Station1&procedure=urn:tds:station.sos:Station1&observedproperty=temperature&eventTime=1990-01-01T00:00:00Z/1990-01-01T00:00:00Z',
        dataType: "xml",
        success: parseSOSGetObs,
        error: function () {alert("AJAX ERROR for " + capRequest );}
});

Спасибо!

1 Ответ

0 голосов
/ 27 января 2012

Исходя из предоставленной вами информации, я предполагаю, что сервер ожидает больше данных в вашем заголовке или данных cookie. При очистке данных на страницах Ajax лучше использовать библиотеку Curl, а не file_get_contents (). Когда вы вводите запрос непосредственно в браузер, используйте опцию Net в расширении firebug firefox, чтобы увидеть, что именно передается в заголовках. Скопируйте эти заголовки и установите их в CURL. Если это не сработает, это может быть проблема с cookie. Пусть CURL посетит исходную страницу, сохранит куки и использует их для второго запроса.

Пример:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/COOKIE");
curl_setopt($ch, CURLOPT_URL, "http://originalsite.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0a2) Gecko/20111101 Firefox/9.0a2");
$junk = curl_exec($ch);
curl_close($ch);


$headers = array("X-Prototype-Version: 1.6.0", "X-Requested-With: XMLHttpRequest");
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/COOKIE");
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/COOKIE");
curl_setopt($ch, CURLOPT_URL, "http://originalsite.com/setsomething.sync");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_REFERER, "http://originalsite.com/");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0a2) Gecko/20111101 Firefox/9.0a2");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$page = curl_exec($ch);
curl_close($ch);
?>

Я забыл: вы можете использовать опцию CURLOPT_PROXY в CURL для установки прокси

...