Java 尝试HTTP POST但格式不正确异常:无协议:yahoo.com

Java 尝试HTTP POST但格式不正确异常:无协议:yahoo.com,java,http-post,Java,Http Post,总的来说,我试图编写一个脚本,用java捕获服务器对HTTP POST的响应 不幸的是,我一直在编码它的URL部分。虽然我遵循了几个关于编码URL的在线示例,但我仍然得到了MalformedURLException… 你知道编码过程中会出什么问题吗 错误: $ java client_post Sending Http POST request Exception in thread "Main Thread" java.net.MalformedURLException: no proto

总的来说,我试图编写一个脚本,用java捕获服务器对HTTP POST的响应

不幸的是,我一直在编码它的URL部分。虽然我遵循了几个关于编码URL的在线示例,但我仍然得到了
MalformedURLException…

你知道编码过程中会出什么问题吗

错误:

$ java client_post

Sending Http POST request
Exception in thread "Main Thread" java.net.MalformedURLException: no 
protocol: http%3A%2F%2Fyahoo.com
     at java.net.URL.<init>(URL.java:567)
     at java.net.URL.<init>(URL.java:465)
     at java.net.URL.<init>(URL.java:414)
     at client_post.sendPost(client_post.java:30)
     at client_post.main(client_post.java:23)
$java客户端\u post
发送Http POST请求
线程“Main thread”java.net中出现异常。MalformedURLException:否
协议:http%3A%2F%2Fyahoo.com
位于java.net.URL。(URL.java:567)
在java.net.URL.(URL.java:465)
在java.net.URL.(URL.java:414)
在client_post.sendPost(client_post.java:30)
在client_post.main(client_post.java:23)
守则:

//package client_post;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URLEncoder;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;

public class client_post {

     private final String USER_AGENT = "Mozilla/5.0";

     public static void main(String[] args) throws Exception {

             client_post http = new client_post();

             System.out.println("\nSending Http POST request");
             http.sendPost();

     }
     // HTTP POST request
     private void sendPost() throws Exception {

             //String url =<host:port/create/service>
             String url = "http://yahoo.com";
             String EncoderUrl = URLEncoder.encode(url, "UTF-8");
             URL obj = new URL(EncoderUrl);
             HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

             //add reuqest header
             con.setRequestMethod("POST");
             con.setRequestProperty("User-Agent", USER_AGENT);
             con.setRequestProperty("Accept-Language","en-US,en;q=0.5");

             String urlParameters = "<string base64>";
// Send post request
             con.setDoOutput(true);
             DataOutputStream wr = new DataOutputStream(con.getOutputStream());
             wr.writeBytes(urlParameters);
             wr.flush();
             wr.close();

             int responseCode = con.getResponseCode();
             System.out.println("\nSending 'POST' request to URL : " + url);
             System.out.println("Post parameters : " + urlParameters);
             System.out.println("Response Code : " + responseCode);

             BufferedReader in = new BufferedReader(
                     new InputStreamReader(con.getInputStream()));
             String inputLine;
             StringBuffer response = new StringBuffer();

             while ((inputLine = in.readLine()) != null) {
                     response.append(inputLine);
             }
             in.close();

             //print result
             System.out.println(response.toString());
            System.out.println(response.toString());

       }

}
//包客户端\u post;
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.urlcoder;
导入java.net.URL;
导入javax.net.ssl.HttpsURLConnection;
公共类客户端\u post{
私有最终字符串用户_AGENT=“Mozilla/5.0”;
公共静态void main(字符串[]args)引发异常{
client_post http=new client_post();
System.out.println(“\n发送Http POST请求”);
http.sendPost();
}
//HTTP POST请求
私有void sendPost()引发异常{
//字符串url=
字符串url=”http://yahoo.com";
字符串EncoderUrl=URLEncoder.encode(url,“UTF-8”);
URL obj=新URL(EncoderUrl);
HttpsURLConnection con=(HttpsURLConnection)obj.openConnection();
//添加reuqest标题
con.setRequestMethod(“POST”);
con.setRequestProperty(“用户代理”,用户代理);
con.setRequestProperty(“接受语言”,“en-US,en;q=0.5”);
字符串url参数=”;
//发送邮寄请求
con.设置输出(真);
DataOutputStream wr=新的DataOutputStream(con.getOutputStream());
writeBytes(URL参数);
wr.flush();
wr.close();
int responseCode=con.getResponseCode();
System.out.println(“\n向URL发送'POST'请求:“+URL”);
System.out.println(“Post参数:+urlParameters”);
System.out.println(“响应代码:“+responseCode”);
BufferedReader in=新的BufferedReader(
新的InputStreamReader(con.getInputStream());
字符串输入线;
StringBuffer响应=新的StringBuffer();
而((inputLine=in.readLine())!=null){
追加(inputLine);
}
in.close();
//打印结果
System.out.println(response.toString());
System.out.println(response.toString());
}
}

当您对url进行编码时,您的url如下所示

 HttpURLConnection con = (HttpURLConnection) obj.openConnection();
http%3A%2F%2Fyahoo.com

除非你有什么特别的东西,否则不要编码

您的程序还引发类强制转换异常

 HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
上面应该和下面一样

 HttpURLConnection con = (HttpURLConnection) obj.openConnection();
下面是工作程序

package com.ds.portlet.library;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;


public class client_post {

     private final String USER_AGENT = "Mozilla/5.0";

     public static void main(String[] args) throws Exception {

             client_post http = new client_post();

             System.out.println("\nSending Http POST request");
             http.sendPost();

     }
     // HTTP POST request
     private void sendPost() throws Exception {

             //String url =<host:port/create/service>
             String url = "http://yahoo.com";
//             String EncoderUrl = URLEncoder.encode(url, "UTF-8");
             URL obj = new URL(url);
             HttpURLConnection con = (HttpURLConnection) obj.openConnection();

             //add reuqest header
             con.setRequestMethod("POST");
             con.setRequestProperty("User-Agent", USER_AGENT);
             con.setRequestProperty("Accept-Language","en-US,en;q=0.5");

             String urlParameters = "<string base64>";
// Send post request
             con.setDoOutput(true);
             DataOutputStream wr = new DataOutputStream(con.getOutputStream());
             wr.writeBytes(urlParameters);
             wr.flush();
             wr.close();

             int responseCode = con.getResponseCode();
             System.out.println("\nSending 'POST' request to URL : " + url);
             System.out.println("Post parameters : " + urlParameters);
             System.out.println("Response Code : " + responseCode);

             BufferedReader in = new BufferedReader(
                     new InputStreamReader(con.getInputStream()));
             String inputLine;
             StringBuffer response = new StringBuffer();

             while ((inputLine = in.readLine()) != null) {
                     response.append(inputLine);
             }
             in.close();

             //print result
             System.out.println(response.toString());
            System.out.println(response.toString());

       }

}
package com.ds.portlet.library;
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入javax.net.ssl.HttpsURLConnection;
公共类客户端\u post{
私有最终字符串用户_AGENT=“Mozilla/5.0”;
公共静态void main(字符串[]args)引发异常{
client_post http=new client_post();
System.out.println(“\n发送Http POST请求”);
http.sendPost();
}
//HTTP POST请求
私有void sendPost()引发异常{
//字符串url=
字符串url=”http://yahoo.com";
//字符串EncoderUrl=URLEncoder.encode(url,“UTF-8”);
URL obj=新URL(URL);
HttpURLConnection con=(HttpURLConnection)obj.openConnection();
//添加reuqest标题
con.setRequestMethod(“POST”);
con.setRequestProperty(“用户代理”,用户代理);
con.setRequestProperty(“接受语言”,“en-US,en;q=0.5”);
字符串url参数=”;
//发送邮寄请求
con.设置输出(真);
DataOutputStream wr=新的DataOutputStream(con.getOutputStream());
writeBytes(URL参数);
wr.flush();
wr.close();
int responseCode=con.getResponseCode();
System.out.println(“\n向URL发送'POST'请求:“+URL”);
System.out.println(“Post参数:+urlParameters”);
System.out.println(“响应代码:“+responseCode”);
BufferedReader in=新的BufferedReader(
新的InputStreamReader(con.getInputStream());
字符串输入线;
StringBuffer响应=新的StringBuffer();
而((inputLine=in.readLine())!=null){
追加(inputLine);
}
in.close();
//打印结果
System.out.println(response.toString());
System.out.println(response.toString());
}
}

看起来您正在尝试对整个URL进行编码,包括
://
和类似字符。URL编码的目的是将这些字符隐藏在路径或查询部分中,它们不应该在主URL中编码。仅对参数或
应用程序/x-www-form-urlencoded
内容使用
URLEncoder

发布堆栈跟踪。不应对端口进行编码number@KrutikJayswal谢谢。@Simply\u me No,仅查询部分中的字符或路径部分中的字符在URL中是不允许的。