0

このページhttp://www2.gcitrading.com/quotes/converter.aspで投稿リクエストを行おうとしていますが、機能しません。投稿リクエスト後も同じページが表示されます(結果は表示されません)。

ブラウザを使用すると、[変換]をクリックすると、ページがhttp://www2.gcitrading.com/quotes/converter.asp?lang=に変わります。これは本当に混乱しています。どうすればこれを機能させることができますか?

これが私のコードです:

public static void main(String[] args) {
    Socket sock = new Socket();
    InputStream in;
    OutputStream out;
    byte[] readBuffer = new byte[4096];

    String res = "";
        try {
        sock.connect(new InetSocketAddress("www2.gcitrading.com", 80));

        in = sock.getInputStream();
        out = sock.getOutputStream();

        out.write(new String("GET /quotes/converter.asp HTTP/1.1\r\n").getBytes());
        out.write(new String("Host: www2.gcitrading.com\r\n\r\n").getBytes());

        while(true) {
            int readSize = in.read(readBuffer);
            if(readSize < 1)
                break;
            res += new String(readBuffer, 0, readSize);
            if(res.contains("</html>"))
                break;
        }

        String cookie = res.substring(res.indexOf("kie:") + 5,res.indexOf("path=/")+6);
        System.out.println("SHow cookie - " + cookie);

        String convert_this = URLEncoder.encode("form_amount=1&form_from_currency=DZD&form_to_currency=USD", "UTF-8");

        out.write(new String("POST /quotes/converter.asp?lang= HTTP/1.1\r\n").getBytes());
        out.write(new String("Host: www2.gcitrading.com\r\n").getBytes());

        out.write(new String("Content-Length: " + convert_this.length() + "\r\n").getBytes());
        out.write(new String("Content-Type: application/x-www-form-urlencoded\r\n").getBytes());
        out.write(new String("Cookie: " + cookie +"\r\n").getBytes());
        out.write(new String("\r\n").getBytes());
        out.write(convert_this.getBytes());

        readBuffer = new byte[4096];
        res = "";

        while(true) {
            int readSize = in.read(readBuffer);
            if(readSize < 1)
                break;
            res += new String(readBuffer, 0, readSize);
            if(res.contains("</html>"))
                break;
        }

        System.out.println(res);


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

ありがとう。ところで、私はc / c ++ソケットを使用してこれを達成する必要がありますが、最初にjavaを使用してテストしました。

4

3 に答える 3

0

次のようなことを試してください:

DataOutputStream dataOut = new DataOutputStream(sock.getOutputStream());
dataOut.writeUTF("[Your String here]"); 

また、ソケットではなく、上位レベルの URL を使用する必要があります。

于 2012-07-13T06:26:07.833 に答える
0

解決しました。Web デバッグ ツールである Charles を使用しましたが、投稿リクエストが不足していることがわかりました。投稿リクエストに追加しただけです:convert_it=true

于 2012-07-16T07:23:28.033 に答える