这个是腾讯QQ下载自定义头像的请求头...(通过IRIS软件抓包得到的)
GET /GetFile HTTP/1.1..Accept: */*..X-VERSION: 1..X-SRCUSERTYPE: 1..X-SRCUIN: 409782976..X-DSTUIN: 383454594..X-DSTUSERTYPE: 1..X-IMAGETYPE: 1..X-SIGNSTRING: 2B6F156FEF2A07095399BDDDDFD64D68F860A933D8B99FED..X-FILEHASH: 62EE2B4A74028506D2558BCBB6AFC755..User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)..Host: 121.14.101.175..Pragma: no-cache然后我通过自己写程序去获得头像时发生了错误System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^GET FACE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
HttpURLConnection httpConn =(HttpURLConnection)(
new URL("HTTP","121.14.101.175",80,
"/GetFile").openConnection());
System.out.println("........................");
httpConn.setRequestMethod("GET");
httpConn.addRequestProperty("Accept", "*/*");
httpConn.addRequestProperty("X-VERSION", "1");
httpConn.addRequestProperty("X-SRCUSERTYPE", "1");
httpConn.addRequestProperty("X-SRCUIN", "409782976");
httpConn.addRequestProperty("X-DSTUIN", "409782976");
httpConn.addRequestProperty("X-DSTUSERTYPE", "1");
httpConn.addRequestProperty("X-IMAGETYPE", "1");
httpConn.addRequestProperty("Pragma", "no-cache");
httpConn.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
httpConn.addRequestProperty("X-SIGNSTRING","310927CC8381D76064B66B513AE729B328EFC995D82659B9");
httpConn.addRequestProperty("X-FILEHASH","AC4C0CD5E1FC9E232A579170E4112396");
httpConn.connect();
BufferedInputStream bis = new BufferedInputStream(httpConn.getInputStream());
byte[] bs = new byte[1024];
int total = -1;
while((total = bis.read(bs)) != -1)
{
System.out.println(new String(bs,0,total,"UTF-8"));
}
System.out.println("ovvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
bis.close();
发生如下错误
Exception in thread "main" java.io.FileNotFoundException: http://121.14.101.175:80/GetFile
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1311)
at org.jivesoftware.openfire.gateway.protocols.qq.Test.main(Test.java:43)
但是登陆QQ时,qq软件是这样去请求自定义头像的...或许腾讯做了一些安全措施,禁止外部去访问...但是我不明白他们是怎么样做到的...我自己的HTTP请求包跟它的一摸一样,为什么我们的不返回数据呢,请知道的指点一下,欢迎您说"我猜,可能,或许"...如果您的回答或猜测帮到了我,绝对给您加分...^_^^_^^_^^_^
GET /GetFile HTTP/1.1..Accept: */*..X-VERSION: 1..X-SRCUSERTYPE: 1..X-SRCUIN: 409782976..X-DSTUIN: 383454594..X-DSTUSERTYPE: 1..X-IMAGETYPE: 1..X-SIGNSTRING: 2B6F156FEF2A07095399BDDDDFD64D68F860A933D8B99FED..X-FILEHASH: 62EE2B4A74028506D2558BCBB6AFC755..User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)..Host: 121.14.101.175..Pragma: no-cache然后我通过自己写程序去获得头像时发生了错误System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^GET FACE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
HttpURLConnection httpConn =(HttpURLConnection)(
new URL("HTTP","121.14.101.175",80,
"/GetFile").openConnection());
System.out.println("........................");
httpConn.setRequestMethod("GET");
httpConn.addRequestProperty("Accept", "*/*");
httpConn.addRequestProperty("X-VERSION", "1");
httpConn.addRequestProperty("X-SRCUSERTYPE", "1");
httpConn.addRequestProperty("X-SRCUIN", "409782976");
httpConn.addRequestProperty("X-DSTUIN", "409782976");
httpConn.addRequestProperty("X-DSTUSERTYPE", "1");
httpConn.addRequestProperty("X-IMAGETYPE", "1");
httpConn.addRequestProperty("Pragma", "no-cache");
httpConn.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
httpConn.addRequestProperty("X-SIGNSTRING","310927CC8381D76064B66B513AE729B328EFC995D82659B9");
httpConn.addRequestProperty("X-FILEHASH","AC4C0CD5E1FC9E232A579170E4112396");
httpConn.connect();
BufferedInputStream bis = new BufferedInputStream(httpConn.getInputStream());
byte[] bs = new byte[1024];
int total = -1;
while((total = bis.read(bs)) != -1)
{
System.out.println(new String(bs,0,total,"UTF-8"));
}
System.out.println("ovvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
bis.close();
发生如下错误
Exception in thread "main" java.io.FileNotFoundException: http://121.14.101.175:80/GetFile
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1311)
at org.jivesoftware.openfire.gateway.protocols.qq.Test.main(Test.java:43)
但是登陆QQ时,qq软件是这样去请求自定义头像的...或许腾讯做了一些安全措施,禁止外部去访问...但是我不明白他们是怎么样做到的...我自己的HTTP请求包跟它的一摸一样,为什么我们的不返回数据呢,请知道的指点一下,欢迎您说"我猜,可能,或许"...如果您的回答或猜测帮到了我,绝对给您加分...^_^^_^^_^^_^
openfire能够绑定QQ,是因为它使用了lumaqq.jar,
那个IM GATEWAY插件通过lumaqq与腾讯QQ通信,然后把通信的内容以xmpp协议封装,再发送给openfire...
而且cookies很重要
it can not be as the same as X-SRCUINe.g.0000 58 2d 53 52 43 55 49 4e 3a 20 31 30 34 33 33 39 X-SRCUIN: 104339
0010 30 39 0d 0a 09..
0000 58 2d 44 53 54 55 49 4e 3a 20 36 31 30 30 39 37 X-DSTUIN: 610097
0010 32 32 31 0d 0a 221..