import java.util.*;
import java.io.*;
import java.net.*;
public class Connect{
public static void main(String[] args){
try{
URLConnection conn = new URL("http://www.baidu.com").openConnection();
conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows XP; DigExt)");
System.out.println("OK,Connect successfully");
}catch(Exception e){
System.out.println(e);
}
}
}
这几天想了一个项目,将自己的博客里leetcode文章提取出来然后自动生成一个文档,这样方便自己转成pdf离线看。
首先是自己手动链接到blog.csdn,net,然后第一步就碰到问题了。
当访问百度或者csdn的首页时能正常访问,然后访问博客文章九提示错误:
java.io.IOException: Server returned HTTP response code: 403 for URL:
经过百度得知原因是(http://blog.sina.com.cn/s/blog_4b6f8d1501017a5l.html):
因为服务器的安全设置不接受Java程序作为客户端访问,解决方案是设置客户端的User Agent。
虽然解决了,接下来看看那句话是什么意思?
一、URLConnection:
抽象类 URLConnection
是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:
- 通过在 URL 上调用
openConnection
方法创建连接对象。 - 处理设置参数和一般请求属性。
- 使用
connect
方法建立到远程对象的实际连接。 - 远程对象变为可用。远程对象的头字段和内容变为可访问。
使用以下方法修改设置参数:
-
setAllowUserInteraction
-
setDoInput
-
setDoOutput
-
setIfModifiedSince
-
setUseCaches
使用以下方法修改一般请求属性:
-
setRequestProperty
上面每个 set
方法都有一个用于获取参数值或一般请求属性值的对应 get
方法。适用的具体参数和一般请求属性取决于协议。
在建立到远程对象的连接后,以下方法用于访问头字段和内容:
-
getContent
-
getHeaderField
-
getInputStream
-
getOutputStream
某些头字段需要经常访问。以下方法:
-
getContentEncoding
-
getContentLength
-
getContentType
-
getDate
-
getExpiration
-
getLastModifed
setRequestProperty
public void setRequestProperty(String key, String value)
注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。
参数:
key
- 用于识别请求的关键字(例如,"
accept
")。
value
- 与该键关联的值。
User-Agent头域的内容包含发出请求的用户信息