2010-04-08 15 views
0

道歉爲我有史以來最長的問題。我正在嘗試在ROOT(一個用於高能物理分析的C++ CERN框架)中的mysql數據庫的php前端接口。首先,我試着讓這個php界面先與wgetcurl配合,因爲我更熟悉它們。下面的命令作品:從PHP獲取內容:POST和查詢的問題

wget --post-data "hostname=localhost:3306&un=joeuser&pw=psswd&myquery=show_spazio_databases;" http://some.host.edu/log/log_query_matlab.php 

的結果是:

database1 

database2 

那就好。如果我離開了--post-data然後我得到的結果:

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'admin'@'localhost' (using password: NO) in /log/log_query_matlab.php on line 6 
i'm dead! Access denied for user 'admin'@'localhost' (using password: NO) 
Warning: mysql_query() [function.mysql-query]: Access denied for user 'admin'@'localhost' (using password: NO) in /log/log_query_matlab.php on line 29 

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /log/log_query_matlab.php on line 29 

我有機會到PHP腳本(只讀),但錯誤本身不是太重要。要緊的是,使用ROOT,我使用的是被稱爲socket.SendRaw(message, message.Length())功能(插座爲TSocket),這給了我同樣的「錯誤」爲wget無後,如果我的「消息」的數據轉換爲

"POST http://some.host.edu/log/log_query_matlab.php?hostname=localhost:3306&un=joeuser&pw=psswd&myquery=show_spazio_databases" 

這可能是徒勞的,但有人知道我應該格式化「消息」的方式,其中包括與--post-data開關等效的東西。或者,是否有一種標準的方法來在單行中格式化POST請求(我見過multi-line stuff。是嗎?)對不起,我很無能!

PS。 mysql的查詢是show databases,但空間已被替換爲_spazio_,意大利人的空間。 db和php接口的作者需要它(以及各種符號的替換),但是有沒有人看到過這個?試圖解決這個問題非常糟糕!

+0

看起來像你的問題是不是MySQL或PHP或頭相關。它可以簡稱爲「如何使用ROOT框架發送POST HTTP請求(或者如何找到使用此框架來執行命令行實用程序的方法)」,對嗎? – 2010-04-08 06:06:07

+0

我想是吧。它也可以是「如何在一個班輪中發送POST HTTP請求」。由於ROOT是C++,可能有一個C++庫用於實現SendRaw。是否有提交HTTP請求的通用C++格式?真的,我只需要更多地瞭解HTTP請求! – physicsmichael 2010-04-08 14:11:31

回答

0

正確的 「一個襯裏」(必須是多行)是:

POST http://some.host.edu/log/log_query_matlab.php HTTP/1.1 
Host: some.host.edu 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 73 

hostname=localhost:3306&un=joeuser&pw=psswd&myquery=show databases 

每一行的端部具有\r\n。內容長度之後的差距有兩組。