Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java发送POST请求?_Java_Jsp_Httprequest - Fatal编程技术网

如何用Java发送POST请求?

如何用Java发送POST请求?,java,jsp,httprequest,Java,Jsp,Httprequest,当我从JSP发送请求时,我使用以下代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> &l

当我从JSP发送请求时,我使用以下代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<form method="post"  action="http://translate.intelsoft.az" id="tform" name="ftext">
<input class="gogo1"  value="a" name="l" id="l1" /> <div class="il">
<p>Rusca</p>
<textarea class="ilkin1" name="t" id="t1" >
выыававыавыавыавфыа
выыававыавыавыавфыа
выыававыавыавыавфыа
выыававыавыавыавфыа</textarea>
<div><input class="gogo" type="submit" value="Tərcümə1" name="b1" /></div></div>    </form>

</body>
</html> 

这里怎么了?

首先,您的JSP页面使用UTF-8字符编码

<%@ page ... pageEncoding="UTF-8"%>
DataOutputStream wr;
try {
    wr = new DataOutputStream(connection.getOutputStream ());
    wr.writeBytes(urlParameters); // <--- Wrong! Uses platform default encoding.
    wr.flush();
请注意,整个
DataOutputStream
装饰是不必要的。它的用途完全不同(即编写
.dat
类型文件)。不要忘记以设置
内容长度的方式指定相同的字符集


其次,参数名称/值本身应该是URL编码的,以便从HTTP请求中正确提取

String urlParameters = "t=" + URLEncoder.encode("выыававыавыавыавфыа", "UTF-8")
                     + "&l=" + URLEncoder.encode("a", "UTF-8");

第三,您的请求头实际上也是错误的:

connection.setRequestProperty("Content-Type", "text/html"); 
connection.setRequestProperty("charset", "utf-8");
您根本没有发送
text/html
数据。您正在发送
应用程序/x-www-form-urlencoded
数据。另外,
charset
应该是
内容类型
标题的属性,因此:

connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
另见:

首先,您的JSP页面使用UTF-8字符编码

<%@ page ... pageEncoding="UTF-8"%>
DataOutputStream wr;
try {
    wr = new DataOutputStream(connection.getOutputStream ());
    wr.writeBytes(urlParameters); // <--- Wrong! Uses platform default encoding.
    wr.flush();
请注意,整个
DataOutputStream
装饰是不必要的。它的用途完全不同(即编写
.dat
类型文件)。不要忘记以设置
内容长度的方式指定相同的字符集


其次,参数名称/值本身应该是URL编码的,以便从HTTP请求中正确提取

String urlParameters = "t=" + URLEncoder.encode("выыававыавыавыавфыа", "UTF-8")
                     + "&l=" + URLEncoder.encode("a", "UTF-8");

第三,您的请求头实际上也是错误的:

connection.setRequestProperty("Content-Type", "text/html"); 
connection.setRequestProperty("charset", "utf-8");
您根本没有发送
text/html
数据。您正在发送
应用程序/x-www-form-urlencoded
数据。另外,
charset
应该是
内容类型
标题的属性,因此:

connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
另见:

但是connection.setRequestProperty(“charset”、“utf-8”)?它只是告诉另一方您在请求正文中使用了什么编码。它根本不执行实际的编码。顺便说一下,这个标题实际上是错误的(内容类型也是
)。请参阅更新后的答案(以及“请参阅”链接,都在其中)。谢谢@BalusC,但我认为我的问题是其他的,因为没有更改。特别是西里尔文请求参数值需要URL编码。您认为问题是什么?。注意:每当您希望以编程方式提交HTML表单时,不要忘记将任何元素的name=value对放入查询字符串中,当然也要将要以编程方式“按下”的元素的name=value对放入查询字符串中(因为这通常在服务器端用于区分是否按下了按钮,如果是,则是哪个按钮)。”但是connection.setRequestProperty(“charset”,“utf-8”)?它只是告诉另一方您在请求正文中对字节进行编码所使用的编码。它根本不执行实际的编码。顺便说一句,这个标题实际上是错误的(内容类型也是)。请参阅更新的答案(以及“请参阅”链接,都在其中)。谢谢@BalusC,但我认为我的问题是其他的,因为没有更改。特别是西里尔文请求参数值需要URL编码。你认为问题是吗?。注意:每当您希望以编程方式提交HTML表单时,不要忘记将任何元素的name=value对放入查询字符串中,当然也要将要以编程方式“按下”的元素的name=value对放入查询字符串中(因为这通常在服务器端用于区分是否按下了按钮,如果按下了按钮,则是哪个按钮)。“您可以使用一个库,比如apache commons httpclient,甚至apache CXF的JAX-RS客户端,来为您节省大量这些繁琐的东西。您可以使用一个库,比如apache commons httpclient,甚至apache CXF的JAX-RS客户端,来为您节省大量这些繁琐的东西。