Java에서 HTTP 요청을 보내는 방법
Java에서 HTTP 요청 메시지를 작성하여 HTTP WebServer로 보내는 방법
java.net 를 사용할 수 있습니다.HttpUrlConnection 입니다.
(여기서부터) 개선한 예.링크 부패 시 포함:
public static String executePost(String targetURL, String urlParameters) {
HttpURLConnection connection = null;
try {
//Create connection
URL url = new URL(targetURL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length",
Integer.toString(urlParameters.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches(false);
connection.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream (
connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.close();
//Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
StringBuilder response = new StringBuilder(); // or StringBuffer if Java version 5+
String line;
while ((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
Oracle의 Java 튜토리얼에서
import java.net.*;
import java.io.*;
public class URLConnectionReader {
public static void main(String[] args) throws Exception {
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
다른 사람들이 Apache의 http-client를 추천하는 것은 알지만, 이는 거의 보증되지 않는 복잡성(즉, 더 많은 문제가 발생할 수 있음)을 더합니다.간단한 작업으로는java.net.URL
할 거다.
URL url = new URL("http://www.y.com/url");
InputStream is = url.openStream();
try {
/* Now read the retrieved document from the stream. */
...
} finally {
is.close();
}
Apache Http Components.HttpCore와 HttpClient의 두 가지 모듈 예를 통해 즉시 시작할 수 있습니다.
HttpUrlConnection이 나쁜 선택인 것은 아니지만 HttpComponents는 지루한 코딩의 대부분을 추상화합니다.최소 코드로 많은 HTTP 서버/클라이언트를 지원하고 싶다면 이것을 추천합니다.덧붙여서, HttpCore 는 최소한의 기능을 가지는 애플리케이션(클라이언트 또는 서버)에 사용할 수 있는 반면, HttpClient 는 복수의 인증 스킴이나 cookie 서포트등을 서포트할 필요가 있는 클라이언트에 사용합니다.
Java 7의 완전한 프로그램은 다음과 같습니다.
class GETHTTPResource {
public static void main(String[] args) throws Exception {
try (java.util.Scanner s = new java.util.Scanner(new java.net.URL("http://tools.ietf.org/rfc/rfc768.txt").openStream())) {
System.out.println(s.useDelimiter("\\A").next());
}
}
}
새 리소스 시도에서는 스캐너가 자동으로 닫히고 InputStream이 자동으로 닫힙니다.
이게 도움이 될 거야JAR을 추가하는 것을 잊지 마세요.HttpClient.jar
클래스 패스로 이동합니다.
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
public class MainSendRequest {
static String url =
"http://localhost:8080/HttpRequestSample/RequestSend.jsp";
public static void main(String[] args) {
//Instantiate an HttpClient
HttpClient client = new HttpClient();
//Instantiate a GET HTTP method
PostMethod method = new PostMethod(url);
method.setRequestHeader("Content-type",
"text/xml; charset=ISO-8859-1");
//Define name-value pairs to set into the QueryString
NameValuePair nvp1= new NameValuePair("firstName","fname");
NameValuePair nvp2= new NameValuePair("lastName","lname");
NameValuePair nvp3= new NameValuePair("email","email@email.com");
method.setQueryString(new NameValuePair[]{nvp1,nvp2,nvp3});
try{
int statusCode = client.executeMethod(method);
System.out.println("Status Code = "+statusCode);
System.out.println("QueryString>>> "+method.getQueryString());
System.out.println("Status Text>>>"
+HttpStatus.getStatusText(statusCode));
//Get data as a String
System.out.println(method.getResponseBodyAsString());
//OR as a byte array
byte [] res = method.getResponseBody();
//write to file
FileOutputStream fos= new FileOutputStream("donepage.html");
fos.write(res);
//release connection
method.releaseConnection();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
Google Java http 클라이언트는 http 요청에 적합한 API를 갖추고 있습니다.JSON 지원 등을 쉽게 추가할 수 있습니다.간단한 요청으로는 과잉 살상일 수 있습니다.
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import java.io.IOException;
import java.io.InputStream;
public class Network {
static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
public void getRequest(String reqUrl) throws IOException {
GenericUrl url = new GenericUrl(reqUrl);
HttpRequest request = HTTP_TRANSPORT.createRequestFactory().buildGetRequest(url);
HttpResponse response = request.execute();
System.out.println(response.getStatusCode());
InputStream is = response.getContent();
int ch;
while ((ch = is.read()) != -1) {
System.out.print((char) ch);
}
response.disconnect();
}
}
소켓은 다음과 같이 사용할 수 있습니다.
String host = "www.yourhost.com";
Socket socket = new Socket(host, 80);
String request = "GET / HTTP/1.0\r\n\r\n";
OutputStream os = socket.getOutputStream();
os.write(request.getBytes());
os.flush();
InputStream is = socket.getInputStream();
int ch;
while( (ch=is.read())!= -1)
System.out.print((char)ch);
socket.close();
POST 요구의 송신에 대해서는, 다음의 링크를 참조해 주세요.
try {
// Construct data
String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
// Send data
URL url = new URL("http://hostname:80/cgi");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
// Process line...
}
wr.close();
rd.close();
} catch (Exception e) {
}
GET 요청을 전송하려면 필요에 따라 코드를 약간 수정할 수 있습니다.구체적으로는 URL 컨스트럭터 내에 파라미터를 추가해야 합니다.그럼 이것도 댓글로 남겨주세요wr.write(data);
기록되지 않은 한 가지는 타임아웃입니다.특히 WebServices에서 사용하는 경우에는 타임아웃을 설정해야 합니다.그렇지 않으면 위의 코드는 무기한 또는 적어도 매우 오랜 시간 동안 대기하기 때문에 아마 원하지 않을 것입니다.
은 이렇게 되어 있습니다.conn.setReadTimeout(2000);
단위입니다.
언급URL : https://stackoverflow.com/questions/1359689/how-to-send-http-request-in-java
'source' 카테고리의 다른 글
Vuex 모듈에서 "뒤틀림"을 방지하기 위해 어떤 이름을 사용합니까? (0) | 2022.08.27 |
---|---|
webpack-simple Vue.js 템플릿에서 콘솔에서 Vue 앱에 액세스하는 방법은 무엇입니까? (0) | 2022.08.21 |
vuejs 요리책의 편집 가능한 Svg 아이콘 시스템에서 아이콘 색상을 변경하는 방법 (0) | 2022.08.21 |
vuex-module-decorator에서 MutationAction을 사용하는 방법 (0) | 2022.08.21 |
C# 확장 메서드에 상당하는 Java (0) | 2022.08.21 |