2016-12-11 2 views
0

Вот мой Java HTTP сервер программы:Отправить HttpGet запрос через соединение TCP на «локальный»

package alan; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class SimpleHTTPServer { 
    public static void main(String args[]) throws IOException { 
     ServerSocket server = new ServerSocket(8080); 
     System.out.println("Listening for connection on port 8080 ...."); 
     while (true) { 
      Socket clientSocket = server.accept(); 
      InputStreamReader isr = new   InputStreamReader(clientSocket.getInputStream()); 
     BufferedReader reader = new BufferedReader(isr); 
     String line = reader.readLine(); 
     while (!line.isEmpty()) { 
      System.out.println(line); 
      line = reader.readLine(); 
     } 
    } 
} 
} 

Хотя эта программа работает, если я пишу «http://localhost:8080» на веб-браузер, программа может обрабатывать Http получает запрос, и он выводит результат на консоли Eclipse, но я хочу сделать это с помощью java-кода.

На самом деле, прежде всего, я хочу создать класс, имя которого является SimpleHTTPClient, и я хочу создать соединение TCP Socket с классом SimpleHTTPServer и отправить HTTPGET-запрос через java-код на мой localhost. Как я могу это сделать? На самом деле, я могу отправить HttpGet запрос с подключением к URL, как это:

package alan; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.Socket; 
import java.net.URL; 
import java.net.URLConnection; 
import java.net.UnknownHostException; 

public class SimpleHTTPClient { 
    static Socket socket = null; 

    public static void main(String args[]) throws UnknownHostException,  IOException { 
    URL oracle = new URL("http://localhost:8080"); 
    URLConnection yc = oracle.openConnection(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); 
    String inputLine; 
    while ((inputLine = in.readLine()) != null) 
     System.out.println(inputLine); 
    in.close(); 
} 
} 

Но я хочу, чтобы отправить запрос HttpGet через соединение TCP сокет к моему локального хоста. Как я могу это сделать?

ответ

1

Для этого вам необходимо распечатать заголовок запроса. Для базового HTTP-запроса просто добавьте http-метод и узел в заголовке.

Смотрите код сильфона

Socket s = new Socket(InetAddress.getByName("stackoverflow.com"), 80); 
PrintWriter pw = new PrintWriter(s.getOutputStream()); 
pw.println("GET/HTTP/1.1"); 
pw.println("Host: stackoverflow.com"); 
pw.println(""); 
pw.flush(); 
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); 
String t; 
while ((t = br.readLine()) != null) { 
    System.out.println(t); 
} 
br.close(); 

Удачи

+0

На самом деле, я уже вижу этот пост: HTTP: //stackoverflow.com/questions/10673684/send-http-request-manually-via- socket --- Но я не могу понять, что я могу даже написать это: pw.print («HELLO \ r \ n»); pw.print ("Host: AHMET \ r \ n \ r \ n"); pw.flush(); --- так что я имею в виду, я могу печатать все, что пишу, я думаю, я не могу понять заголовок логики запроса ... – Ozlu

+0

Не используйте символы возврата печати и возврата. Используйте println. Пойдите, как ответ на этот пост. – thepaulo

+0

См. Код в моем обновленном ответе – thepaulo

Смежные вопросы