gpt4 book ai didi

java - 如何通过 Java 中的 Socket 编程将 post 数据(包含 2 个参数)发送到 https 服务器

转载 作者:行者123 更新时间:2023-12-01 12:57:08 27 4
gpt4 key购买 nike

我在网络上看到一个表单,如果我给出代码(R),车号,它会给出一些信息,现在我想通过套接字编程获取这些信息。我已经编写了代码,但它挂起

网址:https://aptransport.in/CFSTONLINE/Reports/VehicleRegistrationSearch.aspx

import java.net.*;
import java.io.*;
import java.security.*;
import javax.net.ssl.*;

public class TestAP {

public static void main(String[] args) {

int port = 443; // default https port


try{
URL url = new URL("https://aptransport.in/CFSTONLINE/Reports/VehicleRegistrationSearch.aspx");

String path=url.getFile();
// int port = url.getPort();
String host = url.getHost();

System.out.println("Step 0 : Connecting to Server");
Socket cliSocket = new Socket(host,port);
System.out.println("Step 1 : Connection Established ");


System.out.println("Step 2 : Creating Request");
String data1 = URLEncoder.encode("ctl00$OnlineContent$ddlInput", "UTF-8") + "=" + URLEncoder.encode("R", "UTF-8") +"&"+URLEncoder.encode("ctl00$OnlineContent$txtInput", "UTF-8") + "=" + URLEncoder.encode("AP31BF2942", "UTF-8");


BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(cliSocket.getOutputStream()));

bw.write("POST " + path + " HTTPS/1.0\r\n");
bw.write("Host: " + host + "\r\n");
bw.write("Content-Length: " + data1.length() + "\r\n");
bw.write("Pragma: cache\r\n");
bw.write("Cache-Control: private, must-revalidate\r\n");
bw.write("Content-Type: application/x-www-form-urlencoded\r\n");
bw.write("\r\n");
bw.write(data1);

bw.flush();


System.out.println("Step 3 : Request Sent ");

BufferedReader rd = new BufferedReader(new InputStreamReader(cliSocket.getInputStream()));
String line;
System.out.println("Step 4 : Getting Input Stream");
StringBuffer serverData = new StringBuffer("");

while ((line = rd.readLine()) != null) {
serverData.append(line);
}

System.out.println(" \r\n \r\n ******* Data From Server Start : ******* \r\n \r\n \r\n"+serverData+" \r\n \r\n ******* Data From Server End ********* \r\n \r\n ");

String data = serverData.toString();

bw.close();
rd.close();

}catch(java.net.UnknownHostException uh){
System.out.println("UH : Host Not Found ");
}catch(IOException ioe){
System.out.println("IO Exp "+ioe.getMessage());
}catch(Exception e){
System.out.println("Exp "+e.getMessage());
}


}
}

IO Exp Connection reset java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:189) at java.net.SocketInputStream.read(SocketInputStream.java:121) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:154) at java.io.BufferedReader.readLine(BufferedReader.java:317) at java.io.BufferedReader.readLine(BufferedReader.java:382) at TestAP.main(TestAP.java:59)

最佳答案

这里最好的想法是使用 HttpsURLConnection,它可以为您处理大部分协议(protocol)详细信息。如果您确实想使用套接字,那么使用 SSLSocket 而不是普通的 Socket 至少可以处理协议(protocol)的 SSL/TLS 部分。

以下是这两个类的 Javadoc 的链接。您还需要了解一些相关的类,但这将帮助您入门。

HttpURLConnection 的 Javadoc:http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/HttpsURLConnection.html

SSLSocket 的 Javadoc:http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLSocket.html

关于java - 如何通过 Java 中的 Socket 编程将 post 数据(包含 2 个参数)发送到 https 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23784616/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com