Может просматривать URL через браузер, но не с помощью CURL - PullRequest
2 голосов
/ 24 августа 2010

Сегодня я столкнулся с интересной проблемой, когда работал над разрабатываемым приложением. Надеюсь, кто-то знает, почему это происходит / как настроить мой рабочий процесс для этого!

Справочная информация:
Я пишу приложение, которое помогает студентам в университетах общаться друг с другом. Основной рабочий процесс выглядит следующим образом:

  1. Пользователь регистрируется на сервисе
  2. Приложение использует CURL для опроса университетского справочника по их имени
  3. Хранить их контактную информацию в таблице базы данных

Мой тестовый сайт - это каталог Университета Рутгерса (http://www.acs.rutgers.edu/directory) Я могу получить доступ к услуге через мой браузер (Сообщения на http://www.acs.rutgers.edu/pls/pdb_p/Pdb_Display.search_results),, но если я пытаюсь опубликовать ту же информацию через CURL, я получаю ошибку 404.

Примечание: Я получаю ту же ошибку, если открываю этот URL-адрес непосредственно из браузера и не использую их форму для отправки данных.

Код:
Вот код, который они используют на сайте каталога:

<fieldset>
<legend>Search For People</legend>
<div style="width:50%;margin-left:auto;margin-right:auto;">
<form method="post" action="http://www.acs.rutgers.edu/pls/pdb_p/Pdb_Display.search_results" name="thisform" onkeyup="highlight()" onclick="highlight()">
    <p>
        <label for="p_name_last">Last Name:&nbsp;&nbsp;[Required]</label><br>
        <input tabindex="1" accesskey="L" class="required" type="text" id="p_name_last" name="p_name_last" size="25" maxlength="23">
    </p> 
    <p>
        <label for="p_name_first">First Name:&nbsp;&nbsp;[or initial]</label><br> 
        <input tabindex="2" accesskey="f" type="text" id="p_name_first" name="p_name_first" size="25" maxlength="23"> 
    </p>
    <input tabindex="3" type="submit" value="Search">&nbsp;&nbsp;
</form>
</div>

А вот код, который я использую для CURL услуги:

<?php
$p_name_last = "doe";
$p_name_first = "";
$curlPost = 'p_name_last='  . urlencode($p_name_last) . '&p_name_first=' . urlencode($p_name_first) . '&SUBMIT=Search';
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.acs.rutgers.edu/pls/pdb_p/Pdb_Display.search_results');
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); 
if( ! $result = curl_exec($ch)) 
{ 
    trigger_error(curl_error($ch)); 
} 
curl_close($ch); 
echo "<pre>";
print_r($result); 
?>

Любые мысли или предложения будут с благодарностью!

Спасибо
Mike

Ответы [ 4 ]

3 голосов
/ 24 августа 2010

Веб-серверы могут выбирать, какой ответ отправлять после обработки запроса. Вот почему вы видите 404 - там есть ресурс, но он реагирует не интуитивно.

В любом случае, я могу написать с помощью curl на этой странице и получить ответ;

curl http://www.acs.rutgers.edu/pls/pdb_p/Pdb_Display.search_results --data-urlencode p_name_last=test --data-urlencode p_name_first=test

Если я отправлю сообщение с вашим параметром SUBMIT = ..., я получу 404. Попробуйте только с двумя параметрами имени.


Обновление: на самом деле, вы можете отправить только параметр фамилии, если присутствует параметр имени - параметр имени может быть пустым.

1 голос
/ 11 октября 2012

Кажется, проблема в том, что элемент ввода формы

<input tabindex="3" type="submit" value="Search">

не содержит атрибута имени, следовательно, не отправляется вместе с данными POST в форме SUBMIT=search или, по крайней мере, не должно быть, согласно http://www.w3schools.com/tags/att_input_name.asp,, где указано, что

"При отправке формы их значения передаются только элементам формы с атрибутом имени."

Полагаю, ваша попытка привела к ответу 404, потому что скрипт, принимающий ваш запрос, никогда не ожидает переменную SUBMIT, и поэтому принятое решение работает.

0 голосов
/ 30 января 2019

проверьте настройки прокси вашего браузера.У меня такая же проблема.Оказалось, что это было вызвано моей настройкой прокси, которая направила запрос на прокси-сервер.

0 голосов
/ 24 августа 2010

Действительно, страница http://www.acs.rutgers.edu/pls/pdb_p/Pdb_Display.search_results не существует.У вас есть перенаправление на новый адрес: http://eas.rutgers.edu, браузер может отслеживать перенаправление, но у CURL может быть проблема с ним.

Веб-страница, которую вы пытаетесь открыть, перемещена!Адрес: http://eas.rutgers.edu

Пожалуйста, не забудьте обновить свои закладки.

Эта страница будет автоматически перенаправлена ​​через 10 секунд.Если перенаправление не удается, нажмите http://eas.rutgers.edu, чтобы продолжить.

Веб-страница, на которую вы пытаетесь перейти, перемещена!

Новый адрес: http://eas.rutgers.edu

не забудьте обновить закладки.

Эта страница будет автоматически перенаправлена ​​через 10 секунд.Если перенаправление не удается, нажмите http://eas.rutgers.edu, чтобы продолжить.

...