如何获取通过套接字接收的数据的源 URL?
How do I get the source URL of the data being recv'd through a socket?
我考虑过跟踪重定向,因为在我得到HTTP200 ok之前,它们会在标头中有下一个URL,然后我会有200的源的FQDN。
但我不认为浏览器是这样做的,我的代理可以对浏览器请求进行硬重定向,但浏览器在没有收到任何HTTP301的情况下显示重定向数据的正确URL。
我想知道浏览器是如何获取数据源的,然后在winsock中这样做的。任何人
无论浏览器做什么,它都不会从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}。
并非所有HTTP重定向都会导致URL更改。301
重定向当然可以,但其他3xx
重定向则不然。如果浏览器接收到除301
之外的重定向,则它可以决定是继续显示原始URL还是显示新的重定向URL。
有一些方法可以在没有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>
connect()
连接到远程连接后使用getpeername()
函数。它应该返回IP:Port信息,我至少可以从中获取主机名。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- Winsock 数据不是从 IP 检索的,而是从普通 URL 检索的
- 使用 C++ 解析 URL 中的 JSON 数据
- QNetworkAccessManager打开一个带有url的json数据
- 如何获取通过套接字接收的数据的源 URL?
- 如何在linux下使用c++程序从远程url获取数据