有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Java将HTTP请求GET/POST发送到表单?

所以我有了这段代码,我让它开始工作,现在它基本上允许我向几乎任何我想要的外部网站发送http post和获取请求,除非元素不包含name属性。下面是一个例子:

这是Java代码:

    public static String sendPostRequest(String url) {

    StringBuffer sb = null;

    try {

        String data = URLEncoder.encode("user", "UTF-8") + "="
                + URLEncoder.encode("myUserName", "UTF-8") + "&"
                + URLEncoder.encode("submit", "UTF-8") + "="
                + URLEncoder.encode("Submit", "UTF-8");


        URL requestUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) requestUrl
                .openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("GET");

        OutputStreamWriter osw = new OutputStreamWriter(
                conn.getOutputStream());
        osw.write(data);
        osw.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));

        String in = "";
        sb = new StringBuffer();

        while ((in = br.readLine()) != null) {
            sb.append(in + "\n");
        }

        osw.close();
        br.close();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return sb.toString();
}

这是我试图向其发送请求的表单(这是w3schools网站上的表单,这是网站http://www.w3schools.com/html/html_forms.asp):

<form name="input0" target="_blank" action="html_form_action.asp" method="get">

Username: 

<input type="text" name="user" size="20" />

<input type="submit" value="Submit" />

</form>

现在,由于Submit按钮没有name属性,我无法向它发送正确的HTTPGET/Post请求(我知道在这种情况下它是一个Get方法)。我应该用什么替换字符串数据(正确的键/值),以便它实际向该表单发送请求


共 (4) 个答案

  1. # 1 楼答案

    我正在使用HttpClient生成http请求

    HttpClient是开源apache项目。您可以获得广泛的代码。 HttpClient版本4.1是一套很好的Http api

    HttpClient Learning Artical

  2. # 2 楼答案

    您根本不会将submit部分添加到数据中。这只是为了让浏览器知道“提交”按钮触发操作。请注意新打开的站点的URL的外观:http://www.w3schools.com/html/html_form_action.asp?user=myUserName-nosubmit部分在这里。因此data代码应该如下所示:

    String data = URLEncoder.encode("user", "UTF-8") + "="
                + URLEncoder.encode("myUserName", "UTF-8"); // end here
    
  3. # 3 楼答案

    //发出http get请求

    HttpClient httpClientDefault1 = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("http://www.your.targer.url.com/page.html");
    

    //安装头(服务器理解某些浏览器抛出的请求)

    httpPost.setHeader("Connection", "keep-alive");
    httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1");
    httpPost.setHeader("Accept", " text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    httpPost.setHeader("Accept-Language", "en-us,en;q=0.5");
    httpPost.setHeader("Host", "ec2-23-20-44-83.compute-1.amazonaws.com");
    

    httpPost。setHeader(“Referer”,resultur+resulturasp)

    //设置参数

    ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
    nameValuePair.add(new BasicNameValuePair("key",""));
    nameValuePair.add(new BasicNameValuePair("txtenroll","095020693015"));
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
    

    //发送请求

    HttpResponse httpRespnse = httpClientDefault1.execute(httpPost);
    

    //获取响应体

    if(httpRespnse.getStatusLine().getStatusCode() != 200) {
        InputStream in =  httpRespnse.getEntity().getContent();
        byte b[] = new byte[1024] ;
        StringBuilder html = new StringBuilder("");
        while(in.read(b) != -1) {
            html.append((new String(b)).toString());
            b = new byte[1024];
        }
        System.out.println(html);
    }
    

    您还可以通过java代码获取标题、http参数、cookies、管理会话…:)