Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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中获得正确的HTTP响应?_Java_Sockets_Httpresponse_Urlconnection - Fatal编程技术网

如何在JAVA中获得正确的HTTP响应?

如何在JAVA中获得正确的HTTP响应?,java,sockets,httpresponse,urlconnection,Java,Sockets,Httpresponse,Urlconnection,我想在网页上获取一些数据,所以我使用java向服务器发送http请求 我尝试了URLConnection和Jsoup,但它们都无法得到正确的响应 如果在浏览器中浏览url 响应正确,获得搜索结果 但是用java,我只能得到搜索结果,没有结果 为什么响应不正确以及如何获得正确的响应 import java.io.*; import java.util.*; import java.net.*; import org.json.*; class HttpRequest { public

我想在网页上获取一些数据,所以我使用java向服务器发送http请求

我尝试了URLConnection和Jsoup,但它们都无法得到正确的响应

如果在浏览器中浏览url

响应正确,获得搜索结果

但是用java,我只能得到搜索结果,没有结果

为什么响应不正确以及如何获得正确的响应

import java.io.*;
import java.util.*;
import java.net.*;
import org.json.*;

class HttpRequest
{
    public static void main(String[] args) throws Exception
    {
        URL url = new URL("http://www.hkprinters.org/en/member_search.asp?page=1&mode=view");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.flush();

        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("station.txt")));

        String line;
        while((line=rd.readLine())!=null)
        {
            out.write(line);
        }
        out.close();
    }


}






import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.jsoup.*;

public class read_line2 {

    public static void main(String args[]) {
        try {
            Document doc = Jsoup.connect("http://www.hkprinters.org/en/member_search.asp?page=1&mode=view").get();
            Document doc = Jsoup.parse(input, null);
            Elements newHeadlines = doc.select("*");
            System.out.println(newHeadlines);

        } catch (Exception e) {
        }
    }
}

更新:

我想先解释正确和错误的结果

正确的是搜索表单+搜索结果数据(如公司名称、地址、电话),我需要这些数据

不正确的答案是:

<title>db</title>
<title>func</title>
<!DOCTYPE HTML PUBLIC
........
<input type="hidden" name="hdnMode" value="search"/></form>
</table>
<font size="2"><br/>
db
func
我建议使用
您可以更好地控制正在使用的HTTP方法(GET、PUT等…)
这个HTTP客户端被广泛使用
您将有更好的API来处理响应(当然可以使用URLConnection,但是这个框架简化了事情。
我建议使用
您可以更好地控制正在使用的HTTP方法(GET、PUT等…)
此HTTP客户端被广泛使用。

您将有更好的API来处理响应(当然可以使用URLConnection,但是这个框架简化了事情。

尝试使用java.net.HttpURLConnection而不是URLConnection。

尝试使用java.net.HttpURLConnection而不是URLConnection。

如果您没有在请求中发送任何内容,请评论以下几行:

conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.flush();

如果您没有在请求中发送任何内容,请对以下行进行注释:

conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.flush();

我检查了提供的URL的源代码。它在HTML标记中有一些错误。在某些浏览器中可能是表单未提交的原因。这取决于浏览器对错误标记的宽容程度。例如,元素定义在/tr和tr元素之间,这意味着在表内:

...
</tr>
<form action="member_search.asp" method="post" name="frmSearch" 
    onSubmit="return checkSearchForm();">
<tr class="copy"> 
...
。。。
...
我还可以看到用于提交的方法是一个POST,但我在代码中没有看到提供搜索表单中显示的搜索参数的任何设置


我的建议是,您尝试检查您的客户端是否向其他页面发出请求,您可以证明该页面生成良好。

我检查了所提供URL的源代码。HTML标记中存在一些错误。在某些浏览器中,表单未提交的原因可能是这样的。这取决于您的浏览器对坏消息的宽容程度kup.例如,元素是在/tr和tr元素之间定义的,这意味着在表中:

...
</tr>
<form action="member_search.asp" method="post" name="frmSearch" 
    onSubmit="return checkSearchForm();">
<tr class="copy"> 
...
。。。
...
我还可以看到用于提交的方法是一个POST,但我在代码中没有看到提供搜索表单中显示的搜索参数的任何设置


我的建议是,您尝试检查您的客户端是否向其他页面发出请求,您可以证明该页面生成良好。

调用HttpURLConnection.getResponseCode()在您编写之后,如果您需要编写任何看起来可疑的内容,但是在您阅读任何内容之前,如果您真的需要阅读任何内容,那么这可能也是可疑的。如果您只是执行I/O操作,您将任由一些HTTP状态代码映射到IOException的摆布。

调用HttpURLConnection.getResponseCode()在您编写之后,如果您需要编写任何看起来可疑的内容,但是在您阅读任何内容之前,如果您确实需要阅读任何内容,那么这可能也是可疑的。如果您只是执行I/O操作,您将任由一些HTTP状态码映射到IOExceptions的摆布。

您希望得到哪些响应,您实际得到哪些响应?请尝试设置请求头使用类似于
conn.setRequestProperty(“用户代理”、“Mozilla/5.0(Macintosh;U;英特尔Mac OS X 10.4;en-US;rv:1.9.2.2)的软件,Gecko/20100316 Firefox/3.6.2”)
。asp页面可能位于用户代理字符串或Cookie上。它是给出空白响应还是引发异常?我测试了setrequestproperty,结果相同,我认为这不是用户代理,因为我有一个新发现,我将编辑我的问题帖子您希望得到哪种响应?尝试设置请求标题使用类似于
conn.setRequestProperty(“用户代理”、“Mozilla/5.0(Macintosh;U;Intel Mac OS X 10.4;en-US;rv:1.9.2.2)Gecko/20100316 Firefox/3.6.2”)
。asp页面可能位于用户代理字符串或cookies上。它是给出空白响应还是引发异常?我测试了setrequestproperty,结果相同,我认为这不是用户代理,因为我有一个新发现,我将编辑我的问题帖子表单提交后,页面不需要帖子,我只是浏览一下,然后它就会关闭w正确的搜索结果。我对此有一个新发现,我将更新问题提交表单后,页面不需要发布,我只需浏览,然后它将显示正确的搜索结果。我对此有一个新发现,我将更新问题