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); } } }
首先是自己手动链接到blog.csdn,net,然后第一步就碰到问题了。
当访问百度或者csdn的首页时能正常访问,然后访问博客文章九提示错误:
java.io.IOException: Server returned HTTP response code: 403 for URL: http://blog.csdn.net
经过百度得知原因是(http://blog.sina.com.cn/s/blog_4b6f8d1501017a5l.html):
因为服务器的安全设置不接受Java程序作为客户端访问,解决方案是设置客户端的User Agent。
虽然解决了,接下来看看那句话是什么意思?
一、URLConnection:
抽象类 URLConnection
是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:
openConnection
方法创建连接对象。connect
方法建立到远程对象的实际连接。使用以下方法修改设置参数:
setAllowUserInteraction
setDoInput
setDoOutput
setIfModifiedSince
setUseCaches
使用以下方法修改一般请求属性:
setRequestProperty
上面每个 set
方法都有一个用于获取参数值或一般请求属性值的对应 get
方法。适用的具体参数和一般请求属性取决于协议。
在建立到远程对象的连接后,以下方法用于访问头字段和内容:
getContent
getHeaderField
getInputStream
getOutputStream
某些头字段需要经常访问。以下方法:
getContentEncoding
getContentLength
getContentType
getDate
getExpiration
getLastModifed
public void setRequestProperty(String key, String value)
注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。
key
- 用于识别请求的关键字(例如,"
accept
")。
value
- 与该键关联的值。