我是gSOAP的开发人员webservice。其中一个方法返回json输出。但是浏览器需要传递标题(Access-Control-Allow-Origin)。 gSOAP是否支持在发送数据之前传递标头?
UPD:
找到解决方案。只需在http_response函数中添加一些代码:
static int
http_response(struct soap *soap, int status, size_t count)
{
/* some code goes here*/
if ((err = soap->fposthdr(soap, "Access-Control-Allow-Origin", "*")))
return err;
if ((err = soap->fposthdr(soap, "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, CONNECT")))
return err;
if ((err = soap->fposthdr(soap, "Access-Control-Allow-Headers", "X-Requested-With, Content-Type")))
return err;
if ((err = soap->fposthdr(soap, "Access-Control-Allow-Credentials", "true")))
return err;
/* some code goes here*/
}
答案 0 :(得分:0)
我从来没有在我自己的代码中找到任何方法 - 但是我能够通过修改stdsoap2.cpp来做到这一点似乎没问题因为你需要将它编译到你的代码中。我所做的是在http_post函数结束之前添加ClientCertSubjectDN标头:
/******************************************************************************/
#ifndef WITH_NOHTTP
#ifndef PALM_1
static int
http_post(struct soap *soap, const char *endpoint, const char *host, int port, const char *path, const char *action, size_t count)
{ register const char *s;
register int err;
... the code of the function (except the return at the end) ...
/* add more headers */
if ((err = soap->fposthdr(soap, "ClientCertSubjectDN", "CN=IVR Production")))
return err;
return soap->fposthdr(soap, NULL, NULL);
}
#endif
#endif
答案 1 :(得分:0)
实际上,在不更改gsoap代码的情况下,将自己的HTTP标头添加到服务器响应中的方法实际上有些麻烦。
代码示例:
groovy-ant
<强>备注强>: 以上 my_fposthdr 的示例实现在所有&#34;默认&#34;之后发出额外的HTTP标头。 gsoap发出的HTTP标头。每个标头由gsoap调用一次回调挂钩,最后在 key 和 val 为NULL指针的情况下再次调用。因此,您可以让代码检测这些NULL指针并发出自己的标头。最后,您必须使用 key 和 val 作为NULL指针调用原始fposthdr,否则将不会发送HTTP有效负载,即SOAP响应。