【问题标题】:Post query string direct to httpHandler by java通过java将查询字符串直接发布到httpHandler
【发布时间】:2012-10-31 18:42:35
【问题描述】:

我有一个 http 处理程序位于:

http://localhost:8118/log.srv

当我将此网址粘贴到 IE 上时,它运行良好。

http://localhost:8118/log.srv?action=likearticle&noname=989858&ladoi=cutymaraton

http 处理程序获取数据。

但是当我使用java程序发布数据时,没有发生错误,但是,http处理程序没有得到任何数据。 我的java程序:

public static void main(String[] args) {
        try {
            for(int i=1; i<1000; i++){
                URL url= new URL("http://localhost:8118/log.srv");
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
                String data = "action=likearticle&noname=989858&ladoi=cutymaraton"+i;
                System.out.println(data);
                writer.write(data);
                writer.flush();
            }

            System.out.println("Done");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

我使用另一个代码:

String urlParameters = "action=likearticle&noname=989858&ladoi=cutymaraton";
            String request = "http://localhost:8118/log.srv";
            URL url = new URL(request); 
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();           
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setInstanceFollowRedirects(false); 
            connection.setRequestMethod("POST"); 
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
            connection.setRequestProperty("charset", "utf-8");
            connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
            connection.setUseCaches (false);

            DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
            wr.writeBytes(urlParameters);
            wr.flush();
            wr.close();
            connection.disconnect();

没有错误,但没有成功发送数据。 告诉我为什么?有什么解决办法吗?

【问题讨论】:

  • 为什么不像你在浏览器中添加参数作为查询参数呢?
  • @Tichodroma:怎么做?

标签: java http-post httphandler


【解决方案1】:

您可以使用more friendly API,如下所示:

PostMethod post = new PostMethod("http://localhost:8118/log.srv");
post.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
NameValuePair[] data = {
  new NameValuePair("action", "likearticle"),
  new NameValuePair("noname", "989858"),
  new NameValuePair("ladoi", "cutymaraton")
};
post.setRequestBody(data);    

HttpClient httpclient = new HttpClient();
int result = httpclient.executeMethod(post);

InputStream in = post.getResponseBodyAsStream();
// handle response.

【讨论】:

    【解决方案2】:

    使用查询参数创建 URL。

    URL url= new URL("http://localhost:8118/log.srv?action=likearticle&noname=989858&ladoi=cutymaraton"+i);
    

    【讨论】:

    • 是的,我使用:URL url1= new URL("http://10.5.5.71:8118/log.srv?action=likearticle&amp;noname=989858&amp;ladoi=cutymaraton"); url1.openConnection(); 但还没有完成。
    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2016-10-16
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多