2

POSTを介して検索クエリを送信する検索サービス(PHP)があります。その検索エンジンをアプリで使用したいと思います。PHPサービスにはパブリックAPIがありません。

検索クエリを入力し、POSTリクエストをフェッチしてパラメーターの名前を確認する方法はありますか?その後、アプリからPOSTリクエストを送信し、POSTレスポンスをキャッチするために使用します。

これは、パラメータの名前を教えてくれるという私の要求に応答しない政府関係者による公式の検索エンジンです。それは違法ではありません、アプリは無料です、それは彼らが私に返事をするので私がもはや彼らを待つことができないということです。

PS。Ubuntuシェルとその管理ツールにアクセスできます。

編集

これは、検索フォームがWebページのソース(ブラウザ経由で表示)でどのように表示されるかを示しています。

<form action="search.php" method="POST">
   <input type="text" name="search" size=20><br>
   SZ<input type="checkbox" checked name="sz">
   NZ<input type="checkbox" checked name="nz">
   <input type="submit" name="search_term" value="search" >
</form>

編集2

誰かがLinuxコマンドcurlを介してこれを行う適切な方法を私に提案したので、投稿を編集しないでください。

4

2 に答える 2

1

検索フォームでソースを表示して、POST パラメーターを取得しようとしましたか? つまり、入力ボックスの名前

たとえば、tizag サイトの php フォームを編集します。

<html><body>
<h4>Tizag Art Supply Order Form</h4>
<form action="process.php" method="post"> 
<select name="item"> 
<option>Paint</option>
<option>Brushes</option>
<option>Erasers</option>
</select>
Quantity: <input name="quantity" type="text" /> 
<input type="submit" />
</form>
</body></html>

パラメータは入力名、つまり quality と item です

Java コード(これを appengine に使用していました)

HttpURLConnection connection = null;
String line = null;
BufferedReader rd = null;
String urlParameters = "search=search&submit=Submit";
serverAddress = new URL("http://www.search.com/search.php");
// set up out communications stuff
connection = null;
connection = (HttpURLConnection) serverAddress.openConnection();
// connection.setRequestMethod("GET");
connection.setRequestMethod("POST");
connection.setRequestProperty("Referer", "");
connection.setRequestProperty("User-Agent", ""); 
connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
connection.connect();
if (connection.getResponseCode() == 404) {
    throw new ErrorException();
}
ArrayList<String> ud = new ArrayList<String>();
rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while ((line = rd.readLine()) != null) {
    ud.add(line); // add response to arraylist
}
于 2012-04-29T15:10:32.350 に答える
0

これは確かに PHPの curl で実行できることですが、政府のサイトをスクレイピングしてそのデータを収集して再利用することで起こりうる結果を考慮する必要があります。

もちろん、データをどのように使用するか、データの重要性、リクエストの頻度、またはプロキシを使用するかどうかはわかりません。なので、心配無用かもしれません。

サード パーティの検索エンジンによって返されるパラメーターを知りたい。そのため、curl を使用して問題の SE に POST します。次に、返されたページを解析し、目的の情報を抽出します。

編集:わかりました、あなたはJavaの男です。シェルの使用に慣れている場合は、PHP の「 exec」コマンドの例をいくつか読んでください。同様の「system」と「passthru」もあります。

于 2012-04-29T15:05:07.420 に答える