今天,当我正在开发一个正在开发的应用程序时,我遇到了一个有趣的问题。希望有人知道为什么会发生这种情况/如何调整我的工作流程!
背景
我正在编写一个应用程序,帮助大学的学生相互联系。基本工作流程如下:
- 用户注册服务
- 该应用程序使用CURL轮询大学目录中的名称
- 将他们的联系信息存储在数据库表中
醇>
我的测试网站是罗格斯大学目录(http://www.acs.rutgers.edu/directory) 我可以通过我的浏览器访问该服务(帖子到http://www.acs.rutgers.edu/pls/pdb_p/Pdb_Display.search_results),但如果我尝试通过CURL发布相同的信息,我会收到404错误。
注意:如果我直接从浏览器打开该网址并且不使用其表单提交数据,我会收到同样的错误。
代码:
以下是他们在目录网站上使用的代码:
<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: [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: [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">
</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);
?>
任何想法或建议将不胜感激!
谢谢,
麦克
答案 0 :(得分:3)
Web服务器可以选择处理请求后要发送的响应。这就是你看到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 = ... param发布,我会得到一个404.仅使用两个名称参数进行尝试。
更新:实际上,只要第一个名称参数存在,您就可以只发送姓氏参数 - 第一个名称参数可以为空。
答案 1 :(得分:1)
问题似乎是表单的输入元素
<input tabindex="3" type="submit" value="Search">
不包含名称属性,因此不会以SUBMIT=search
形式在POST数据中发送,或者根据http://www.w3schools.com/tags/att_input_name.asp,至少它不应该是
&#34;只有具有name属性的表单元素才会在提交表单时传递其值。&#34;
我认为您的尝试产生了404响应,因为接受您请求的脚本从不期望SUBMIT
变量,这就是接受解决方案有效的原因。
答案 2 :(得分:0)
检查您的浏览器代理设置。 我有同样的问题。原来是我的代理设置导致的,该设置将请求定向到代理服务器。
答案 3 :(得分:-1)
确实页面http://www.acs.rutgers.edu/pls/pdb_p/Pdb_Display.search_results不存在。 您已重定向到新地址:http://eas.rutgers.edu,浏览器可以遵循重定向,但CURL可能有问题。
您尝试访问的网页已移动!
请记住更新书签。
此页面将在10秒后自动重定向。 如果重定向失败,请点击http://eas.rutgers.edu继续。
您尝试访问的网页已移动!
请记住更新书签。
此页面将在10秒后自动重定向。 如果重定向失败,请点击http://eas.rutgers.edu继续。