使用Java发送HTTP请求GET / POST以形成?

所以我有这段代码,我得到它的工作,现在它基本上允许我发送httppost并获取几乎任何我想要的外部网站的请求除非元素不包含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 ):

 
Username:

现在因为Submit按钮没有name属性,我无法向它发送正确的HTTP Get / Post请求(我知道在这种情况下它是一个get方法)。 如何使用(适当的键/值)替换String数据,以便它实际向此表单发送请求?

我正在使用HttpClient生成http请求

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

HttpClient学习艺术

您根本不会将submit部分添加到数据中。 这仅供浏览器知道“提交”按钮触发操作。 请注意新打开的网站的URL如何显示: http : //www.w3schools.com/html/html_form_action.asp? user = myUserName – 此处不submit部分。 所以你的data代码应如下所示:

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

//发出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( “引用站点”,resultUrl + resultUrlAsp);

//设置参数

 ArrayList nameValuePair = new ArrayList(); 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参数,cookie,管理会话…… 🙂 🙂

我有一个ClientHttpRequest类,可以执行所有多部分,文件等,并具有可选的进度跟踪和取消。 它已经存在了大约10年。 使用起来非常简单。 现在还有一个Scala版本。 https://github.com/vpatryshev/ScalaKittens/blob/master/src/main/scala/scalakittens/ClientHttpRequest.scala

http://myjavatools.com/