2011-06-02 105 views
2

試圖提交一個表單,捲曲都經由PHP和命令行發送。服務器的響應包含空內容(下面標題)。比響應不同CURL響應於請求,從瀏覽器

當相同的網址通過瀏覽器提交,響應由適當webapge的。

是否嘗試經由提交POST捲曲請求參數和經由每個下面的命令行卷曲標誌「-d」,「F」和「-G」的GET。

如果查詢串參數都貼有 「-d」 標誌,所得標題是:

HTTP/1.1 302暫時移動
日期:星期四,2011 02 6二十一點41分54秒GMT
服務器:Apache
Set-Cookie:JSESSIONID = DC5F435A96A353289F58593D54B89570;路徑=/XXXXXXX
P3P:CP = 「CAO PSA OUR」
位置:http://www.XXXXXXXX.com/
的Content-Length:0
連接:關閉
的Content-Type:text/html的;字符集= UTF-8
集-Cookie:XXXXXXXXXXXXXXXX = 1318103232.20480.0000;路徑=/


如果查詢串參數都貼有 「-F」 標誌,所得的標題是:

HTTP/1.1 100繼續

HTTP/1.1 500內部服務器錯誤
日期:星期四,2011年6月2日21時52分54秒GMT
服務器:Apache
的Content-Length:1677
連接:關閉
的Content-Type:text/html的;字符集= UTF-8
的Set-Cookie:XXXXXXXXXXXXXX = 1318103232.20480.0000;路徑=/
有所不同:接受編碼

<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> 

問題:

  1. 什麼可能導致服務器根據捲曲請求的性質不同迴應。

  2. 如何成功地通過CURL提交申請?

+0

可能是因爲CURL和PHP請求中的Accept標頭不同,或者可能是Expect標頭 - 可能是影響服務器響應方式的一系列因素。 Wireshark(http://www.wireshark.org/)是一個非常有用的調試工具,如果你可以捕捉你電腦上的內容,你就可以確定兩個請求之間的區別正在製作,這可能會有所幫助。 – 2011-06-02 22:14:43

+0

將查看wi​​reshark,但已經使用「-i」和「-v」verbose選項來查看HTTP頭部輸出;沒有幫助。還使用Firefox螢火蟲附加功能查看回應; ho幫助。 – Soph 2011-06-03 02:02:07

回答

0

要添加到什麼理查德說,我曾經見過服務器檢查用戶代理字符串和不同的行爲根據其值的情況。

+0

我嘗試過不同的用戶代理,欺騙發件人IP地址(使用--interace選項)和Referer網址(例如網站期望的),但沒有幫助。 – Soph 2011-06-03 01:57:00

1

HTTP/1.1 100 Continue

我曾與此頭前,相關的問題。有些服務器根本不理解它。嘗試使用此選項覆蓋Expect標題。

curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('Expect:'));

0

我剛纔吃了這種經驗,什麼固定令人驚奇。在我的情況下,我正在登錄到服務器,所以我可以上傳文件,讓服務器在其上進行工作,然後下載新文件。我首先在Chrome中完成了這項工作,並使用開發工具在此簡單事務中捕獲了超過100個HTTP請求。如果我正在嘗試從命令行執行所有這些操作,大多數人只是簡單地獲取我不需要的資源,所以我只篩選出了我所知道的至少我需要的資源。

最初,這歸結爲GET設置cookie和用戶名和密碼,一個POST上傳的文件,後執行該文件的工作,和GET來獲取新的文件登錄。我無法獲得第一個POST實際工作。來自該POST的響應應該是包含上傳ID,上傳時間等的信息,但是相反,即使狀態爲200 OK,我也得到了空的JSON列表。

我使用CURL來完全欺騙來自瀏覽器的請求(複製用戶代理,覆蓋期望等),但仍然沒有得到任何東西。然後,我開始隨意添加一些從第一個GET和POST之間的Chrome中捕獲的請求,而在POST之前添加GET請求以獲取JSON歷史記錄後,我們開始隨意添加一些請求,POST實際上返回了它應有的內容。

TL; DR某些網站在初次登錄後需要更多請求才能開機自檢。我會嘗試捕獲服務器和瀏覽器之間的成功交換,並查看所有請求。一些請求可能不像看起來那樣多餘。