2012-01-27 132 views
1

編輯:這是什麼在我的網站日誌中顯示 xx.xx.xxx.xx - [27/Jan/2012:17:42:24 -0500]「POST/dir /addData2.php HTTP/1.1" 200 - www.mywebsites.com 「 - 」 的 「Java/1.7.0」 「 - 」PHP收到來自Java的POST請求

我主持我的網站在1 & 1,我想有blank.php頁應該接受POST請求並將其上傳到我的數據庫。我認爲我正確地發送我的POST,並且不知何故我不能在我的網站上正確處理它。因爲沒有任何內容插入到我的數據庫中。響應的內容長度爲0,但即使我發送的字符串長度不變,也不會改變。另一種選擇是主持人不允許我做遠程發佈請求(仍在等待回覆)。

我從Java應用程序發送POST請求是這樣的:

URL url = new URL("www.mywebsite.com/blank.php");  
HttpURLConnection request = (HttpURLConnection)url.openConnection(); 
request.setRequestProperty("Content-type","application/x-www-form-urlencoded"); 
request.setRequestMethod("POST"); 
OutputStreamWriter post = new OutputStreamWriter(request.getOutputStream()); 
String data = URLEncoder.encode("account", "UTF-8") + "=" + URLEncoder.encode(message[0], "UTF-8"); 
data += "&" + URLEncoder.encode("message", "UTF-8") + "=" + URLEncoder.encode(message[2], "UTF-8"); 
data += "&" + URLEncoder.encode("type", "UTF-8") + "=" + URLEncoder.encode(message[0], "UTF-8"); 
post.write(data); 
post.flush(); 
/* 
/String example 
/account=103&message=Feller+1391.88+0&type=103 
*/ 

來自服務器的響應是:

null=[HTTP/1.1 200 OK] 
Date=[Fri, 27 Jan 2012 21:59:10 GMT] 
Content-Length=[0] 
Keep-Alive=[timeout=2, max=200] 
Connection=[Keep-Alive] 
Content-Type=[text/html] 
Server=[Apache] 
X-Powered-By=[PHP/5.2.17] 

我的網頁上有這個基本的PHP代碼(現在,將改善/稍後檢查內容)

$link = mysql_connect($hostname, $username, $password); 
$db_selected = mysql_select_db($database, $link); 
$query = "INSERT INTO newData(account, message, type) VALUES('$_POST[account]', '$_POST[message]', '$_POST[type]')"; 
mysql_query($query) || die(); 

我想指出我沒有私人服務器,並且稍後我可能會使用http://hc.apache.org/httpcomponents-core-ga/examples.html。現在我只想從我的Java應用程序發送一個字符串,用PHP接收並插入到MySQL數據庫。

+0

你的問題含糊不清。你的具體問題是什麼?響應內容長度爲0?但是你沒有顯示任何寫入響應的PHP代碼? – BalusC 2012-01-27 22:52:10

+0

好吧,我的問題是比較我的代碼和代碼示例一切看起來都一樣,但仍然在我的數據庫上沒有插入任何內容。不知道你寫的迴應是什麼意思。我的想法是單向通信,應用到服務器(發送自動響應,但我不認爲我必須回覆它)。我無法寫出我自己的回覆,因爲它不是我自己的服務器(共享主機) – Juan 2012-01-27 23:07:51

+0

請盡一切可能查看日誌。訪問日誌對於解決網站問題非常重要。 – paulsm4 2012-01-27 23:13:13

回答

1

您還沒有告訴客戶端代碼這是一個POST請求。它可能會默認做一個GET。

url = new URL(targetURL); 
connection = (HttpURLConnection)url.openConnection(); 
connection.setRequestMethod("POST"); 
+0

這是我第一次猜測。 OP說他做了一個「setRequestMethod(」POST「)」,也許這是他原來的帖子,也許是後來的編輯,我不知道,但我*強烈*鼓勵OP到* FIRST *「檢查所有的基礎知識「 - 檢查日誌,驗證PHP,驗證mysqL,驗證PHP變量。恕我直言... – paulsm4 2012-01-27 23:10:29

+0

這是一個後續編輯(點擊」編輯X分鐘前「看到的變化)。 – DNA 2012-01-27 23:15:38

2

是的,我確定你的ISP允許「發佈」和「獲取」HTTP服務器請求。從表面上看,你的Java和PHP看起來都是「OK」的。

強烈建議:

1)檢查服務器上的Apache日誌。

確保請求到達(它可能)。

檢查錯誤(也很可能沒有對您的要求 - 但是你應該看到Apache的錯誤日誌SOMETHING

2)。確認PHP工作。

用「phpinfo()」寫出「hello world」頁面;是做這件事的好方法。

3)確認MySQL正在工作。

編寫一個「hello world」PHP頁面來驗證您可以1)連接,2)進行查詢,3)在您的Web瀏覽器中回顯查詢是理想的。

4)確認您可以成功讀取您認爲從客戶端獲得的「$ _POST [account]」值。

5)在這一點上,你應該能夠:

一)在客戶端與服務器

b)將讀取POST請求,並將其寫入到數據庫

「希望這有助於..並請回覆任何具體的問題/你可能有問題。

+0

PS:用「|| die()」修改你的MySQL查詢,並回顯錯誤信息。但*請*檢查基本知識:Apache日誌,PHP,MySqlConnectivity和PHP變量 - 首先。 – paulsm4 2012-01-27 23:11:32

+0

可悲的1&1不允許我看到Apache錯誤日誌,但他們有這個http://faq.1and1.com/miscellaneous/14.html(到目前爲止沒有條目)。我有一個窗體,方法後和另一個相同的PHP代碼的網頁。使用表單我可以將元素插入到我的數據庫中。我甚至從我的Java應用程序複製字符串並插入它們。 (我更改mysql和php代碼,使其儘可能簡單incase回聲或做小事有什麼事情) – Juan 2012-01-27 23:14:06

+0

我發送的錯誤鏈接現在工作,但到目前爲止只顯示錯誤'$ _POST [帳戶]'時無需先設置即可訪問。 (修正了在測試版本中的實際版本,我添加了isset('$ _ POST [account]')(不應該再次顯示) – Juan 2012-01-27 23:42:34

1

看起來你沒有在你的HttpUrlConnection上設置請求方法,默認是GET。你會需要像

request.setRequestMethod("POST"); 

如果不行,我會考慮,而使用Apache HTTP客戶端從一開始就正確了,它比easiert Java標準HTTP客戶端API使用。

+0

我在複製代碼時意外地把這條線關掉了(代碼稍微長一些,並且希望保持簡短)編輯並添加行 – Juan 2012-01-27 23:04:05

相關問題