如何获取通过套接字收集的数据的源URL?

时间:2012-01-23 18:57:50

标签: c++ http sockets proxy winsock

我考虑过跟踪重定向,因为他们会在标题中有下一个URL,直到我得到HTTP200确定,然后我会得到200的源代码的FQDN。

但我不认为浏览器是这样做的,我的代理可以对浏览器请求进行硬重定向,但浏览器会显示重定向数据的正确URL,而不会收到任何HTTP301。

我想知道浏览器做什么来获取其数据源,然后在winsock中执行此操作。任何人吗?

4 个答案:

答案 0 :(得分:2)

无论浏览器做什么,它都无法从winsock层检索信息:套接字仅在IP地址和端口中传输。我对winsock(我是UNIX人员)并不是很了解,但它似乎与UNIX套接字层足够相似,以确保任何传输级别信息都来自更高级别的抽象。如果您查看[OSI模型] {http://en.m.wikipedia.org/wiki/OSI_model},您会看到winsocks正在寻找5级,而您正在寻找的东西是7级.API通常保持在相应的水平。这个观点似乎得到了[winsock FAQ] {http://tangentsoft.net/wskfaq/intermediate.html#appproto}的支持。

答案 1 :(得分:0)

并非所有HTTP重定向都会导致URL更改。 301重定向当然可以,但其他3xx重定向则不然。如果浏览器收到301以外的重定向,则可能会决定是继续显示原始网址还是显示新的重定向网址。

答案 2 :(得分:0)

有一些方法可以在没有301的情况下重定向。还有302.有元素

<meta http-equiv="refresh" content="0; url=http://foo.com/">

最后,还有JavaScript:

<html><head><script language="javascript">    
window.location.href = "http://www.bar.com";
</script></head><body></body></html>

答案 3 :(得分:0)

我的问题的Winsock解决方案是在getpeername()之后使用connect()函数进行远程连接。那应该返回IP:端口信息,我至少可以从中获取主机名。