如何向 HTTP 请求添加自定义标头

如何向 HTTP 请求添加自定义标头,第1张

使用 MFC 的 BEGIN_INTERFACE_PART 宏创世丛好建一个内部类,使其实现 IHttpNegotiate 接口。MFC 会将 IHttpNegotiate 查询委托给这个内部类。这些应该在该类的 .h 文件中。

BEGIN_INTERFACE_PART(HttpNegotiateObj, IHttpNegotiate)

STDMETHOD_(HRESULT, BeginningTransaction)(LPCWSTR szUrl,

LPCWSTR szHeaders, DWORD dwReserved, LPWSTR *pszAdditionalHeaders)

STDMETHOD_(HRESULT, OnResponse)(DWORD dwResponseCode,

LPCWSTR szResponseHeaders, LPCWSTR szRequestHeaders, LPWSTR*

pszAdditionalRequestHeaders)

END_INTERFACE_PART(HttpNegotiateObj)

3.

使用 MFC 的 BEGIN_INTERFACE_MAP 宏将 IHttpNegotiate 添加为一个 QI-able 接口郑拿。这应该位于该类的 .cpp 文件中。

BEGIN_INTERFACE_MAP(NegotiateCallback, CCmdTarget)

INTERFACE_PART(NegotiateCallback, IID_INegotiateCallback, Dispatch)

INTERFACE_PART(NegotiateCallback, IID_IHttpNegotiate, HttpNegotiateObj)

END_INTERFACE_MAP()

4.

提供 IHttpNegotiate 方法的实现,以便添加标头或检查响应标头。下面的代码会向传出事务添加一个 X-Custom-App HTTP 标头。请注意,您要负责在每个自定义标头的结尾插入一个 CR/LF(回车符/换行符);否则,您的自定义标头则会省略后面紧跟的标头,从而损坏您的 HTTP 事务。另外,还要确保使用 CoTaskMemAlloc() 来代替 C 运行库内存管理函数,以便 URLMON 可以通过调用 CoTaskMemFree() 来释放您的数据。

STDMETHODIMP NegotiateCallback::XHttpNegotiateObj::BeginningTransaction(LPCWSTR

szUrl, LPCWSTR szHeaders, DWORD dwReserved, LPWSTR

*pszAdditionalHeaders) {

LPWSTR pszHeader = (LPWSTR)CoTaskMemAlloc(74)

memcpy((void*)pszHeader, (void*)L"X-Custom-App: Version

1.1.3748.9\r\n", 74)

*pszAdditionalHeaders=pszHeader

return S_OK

}

5.

创建一个新的 MFC 类,使其成为 CAsyncMonikerFile 的子类。我们将此类称为 CFetchData。搜铅

6.

重写 CAsyncMonikerFile 的 Open() 方法。此方法负责创建 MFC 用于接收下载状态事件的 IBindStatusCallback 实现。您需要使用一个指向 NegotiateCallback 的 IUnknown 的指针自己创建此回调,从而使得 MFC 的 IBindStatusCallback 实现和您的 IHttpNegotiate 实现能够得以聚合。聚合是一个 COM 技术,它能够使用一个类的功能来扩展另一个类。在此实例中,这就表示 URLMON 为 IHttpNegotiate 在 MFC 的 IBindStatusCallback 上执行的所有查询都将委托给您的 IHttpNegotiate 实现。

BOOL CFetchData::Open(LPCTSTR lpszURL, CFileException* pError) {

nc = new NegotiateCallback()

LPDISPATCH pNegCallDisp = nc->GetIDispatch(FALSE)

// I borrowed this from oleasmon.cpp.

IPTR(IBindHost) pBindHost(CreateBindHost(), FALSE)

IPTR(IBindCtx) pBindCtx(CreateBindContext(pError), FALSE)

if (pError &&(pError->m_cause != CFileException::none))

return FALSE

// Instantiate our NegotiateCallback object, and aggregate with the

// IBindStatusCallback supplied by MFC.

IPTR(IUnknown) pBSCUnk(CreateBindStatusCallback(pNegCallDisp), FALSE)

IPTR(IBindStatusCallback) pBSC

pBSCUnk->AddRef()

pBSC.QueryInterface(pBSCUnk)

return Attach(lpszURL, pBindHost, pBSC, pBindCtx, pError)

}

7.

为了在数据下载后接收数据,请在 CAsyncMonikerFile 上实现 IBindStatusCallback 方法。CAsyncMonikerFile 已经实现了此接口,因此您只需提供重写。

HttpCanary应用。

1、使滚知用HTTPCatcher或Charles等抓包工具,可以直接编辑或添加请求头。

2、使用APP内置开发者选项进行修改,需要对APP有一定的了解和理解。

3、使用一些专业的HTTP请求库毁拿进行开发和编程,可以自定义请求头来实现功能纤备搭。

你好灶春,

指定自定义HTTP响应标头

1、若要使 Microsoft IIS 能够定义自定义 HTTP 响应标头以便所有页面自动以 EmulateIE7 模式呈现,您可以使用以下 web.config 示例。

(仅适用于IIS7。IIS早期版本没有system.webServer一节)

2、您也隐腊耐可以在基于 Windows Server 2008 的计算机上配置 IIS 7 以包含自定义 HTTP 响应标头,步骤如下:

依次单击“开始”、“管理工具”,然后单击“Internet Information Services (IIS) 管理器”。

在“连接”窗格中,展开服务器的节点,然后展开“站点”。

单击要添加自局和定义 HTTP 响应标头的网站。

在网站窗格中,双击“IIS”部分中的“HTTP 响应标头”。

在“ *** 作”下,单击“添加”。

在“名称”框中,键入“X-UA-Compatible”。在“值”框中,键入 IE=EmulateIE7。

单击“确定”。

3、若要将 IIS 6 及早期版本配置为包含自定义 HTTP 响应标头,请按照下列步骤进行 *** 作:

依次单击“开始”、“运行”,然后键入 inetmgr.exe 并单击“确定”。

展开所需服务器,然后展开“网站”。

右键单击所需网站,然后单击“属性”。

单击“HTTP 标头”选项卡。

在“自定义 HTTP 标头”下,单击“添加”。

在“自定义标头名称”框中,键入“X-UA-Compatible”。

在“自定义标头值”框中,键入“IE=EmulateIE7”。

单击“确定”两次。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/bake/11983491.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存