Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CURL响应不同于对从浏览器发送的请求的响应_Php_Curl - Fatal编程技术网

Php CURL响应不同于对从浏览器发送的请求的响应

Php CURL响应不同于对从浏览器发送的请求的响应,php,curl,Php,Curl,试图通过PHP和命令行提交带有CURL的表单。来自服务器的响应包含空内容(下面发布的标题) 当通过浏览器提交相同的URL时,响应由适当的webapge组成 已尝试通过POST和GET通过以下命令行CURL标志“-d”“-F”和“-G”提交CURL请求参数 如果查询字符串参数带有“-d”标志,则生成的标题为: HTTP/1.1 302临时移动 日期:2011年6月2日星期四21:41:54 GMT 服务器:Apache 设置Cookie:JSESSIONID=DC5F435A96A353289F5

试图通过PHP和命令行提交带有CURL的表单。来自服务器的响应包含空内容(下面发布的标题)

当通过浏览器提交相同的URL时,响应由适当的webapge组成

已尝试通过POST和GET通过以下命令行CURL标志“-d”“-F”和“-G”提交CURL请求参数

如果查询字符串参数带有“-d”标志,则生成的标题为:

HTTP/1.1 302临时移动
日期:2011年6月2日星期四21:41:54 GMT
服务器:Apache
设置Cookie:JSESSIONID=DC5F435A96A353289F58593D54B89570;路径=/XXXXXXX
P3P:CP=“我们的”
地点:
内容长度:0
连接:关闭
内容类型:text/html;字符集=UTF-8
设置Cookie:xxxxxxxxxxxxxx=1318103232.20480.0000;路径=/


如果查询字符串参数带有“-F”标志,则生成的标题为:

HTTP/1.1 100继续

HTTP/1.1500内部服务器错误
日期:2011年6月2日星期四21:52:54 GMT
服务器:Apache
内容长度:1677
连接:关闭
内容类型:text/html;字符集=utf-8
设置Cookie:xxxxxxxxxxxxx=1318103232.20480.0000;路径=/
变化:接受编码

Apache Tomcat/5.5.26-错误报告HTTP状态500-
键入异常报告消息说明服务器遇到内部错误(),无法满足此请求。

异常javax.servlet.ServletException:servlet执行引发异常
根本原因java.lang.NoClassDefFoundError:com/oreilly/servlet/multipart/MultipartParser
com.corsis.tuday.servlet.mp.MPRequest.(MPRequest.java:27)
com.corsis.tuday.servlet.mp.MPRequest.(MPRequest.java:21)
com.corsis.tuday.servlet.TuesdayServlet.doPost(TuesdayServlet.java:494)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

注意,根本原因的完整堆栈跟踪可在Apache Tomcat/5.5.26日志中找到。


Apache Tomcat/5.5.26
问题:

  • 根据CURL请求的性质,可能导致服务器响应不同的内容

  • 如何通过CURL成功提交请求


  • 除了Richard所说的,我还看到服务器检查用户代理字符串并根据其值采取不同行为的情况。

    HTTP/1.1 100 Continue

    我以前遇到过与此标题相关的问题。有些服务器根本不理解它。尝试此选项以覆盖Expect标头


    curl_setopt($curl_handle,CURLOPT_HTTPHEADER,数组('Expect:')

    我刚刚体验过这一点,修复它的方法令人惊讶。在我的情况下,我登录到一个服务器,这样我就可以上传一个文件,让服务器处理它,然后下载新文件。我首先在Chrome中这样做,并使用开发工具在这个简单的事务中捕获了100多个HTTP请求。如果我试图从命令行执行所有这些操作,大多数都只是简单地获取我不需要的资源,所以我只筛选出我知道至少应该需要的资源

    最初,这归结为设置cookie并使用用户名和密码登录的GET、上载文件的POST、对文件执行工作的POST以及检索新文件的GET。不过,我无法得到第一个真正工作的职位。那篇文章的回复应该是包含上传ID、上传时间等信息,但是我得到的是空的JSON列表,尽管状态是200 OK

    我使用CURL来欺骗来自浏览器的请求(复制用户代理、覆盖Expect等),但仍然一无所获。然后我开始任意添加一些请求,这些请求是我在第一次GET和POST之间从Chrome捕获的,在POST之前添加JSON历史记录的GET请求之后,POST实际上返回了它应该返回的内容


    TL;DR有些网站在首次登录后需要更多请求才能发布。我将尝试捕获服务器和浏览器之间的成功交换,并查看所有请求。有些请求可能不像看上去那样多余。

    可能是CURL和PHP请求中的Accept头不同,或者可能是Expect头-可能是影响服务器响应方式的许多因素。调试正在发生的事情的一个有用的工具是Wireshark()-如果你能在线路上捕捉到你的机器正在发生的事情,你将能够确定你正在发出的两个请求之间的差异,这可能会有所帮助;没有帮助。还使用FirefoxFirebug插件查看响应;我尝试过不同的用户代理、伪造的发送者IP地址(使用--interace选项)和引用者URL(如网站期望的URL),但没有得到任何帮助。
    <html><head><title>Apache Tomcat/5.5.26 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Exception report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>javax.servlet.ServletException: Servlet execution threw an exception<br>
    </pre></p><p><b>root cause</b> <pre>java.lang.NoClassDefFoundError: com/oreilly/servlet/multipart/MultipartParser<br>
        com.corsis.tuesday.servlet.mp.MPRequest.<init>(MPRequest.java:27)<br>
        com.corsis.tuesday.servlet.mp.MPRequest.<init>(MPRequest.java:21)<br>
        com.corsis.tuesday.servlet.TuesdayServlet.doPost(TuesdayServlet.java:494)<br>
        javax.servlet.http.HttpServlet.service(HttpServlet.java:710)<br>
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)<br>
    </pre></p><p><b>note</b> <u>The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/5.5.26</h3></body></html>