这个是腾讯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请求包跟它的一摸一样,为什么我们的不返回数据呢,请知道的指点一下,欢迎您说"我猜,可能,或许"...如果您的回答或猜测帮到了我,绝对给您加分...^_^^_^^_^^_^

解决方案 »

  1.   

    首先谢谢这位朋友...你说的XMPP协议是指openfire吧...
    openfire能够绑定QQ,是因为它使用了lumaqq.jar,
    那个IM GATEWAY插件通过lumaqq与腾讯QQ通信,然后把通信的内容以xmpp协议封装,再发送给openfire...
      

  2.   

    httpConn.addRequestProperty改成httpConn.setRequestProperty试试看呢?
      

  3.   

    不懂JAVA,但是我还是说下我的想法,估计某个参数是不允许重放的,你多捉几个包看看有什么变化
    而且cookies很重要
      

  4.   

    X-DSTUIN is wrong
    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..