我曾经的要求很简单,只是要在我内置BROWSER发请求在在头里加入COOKIE值,
但试来试去都不成,但有趣的是的,我在头里加入其它东西是可行的,如:
User-Agent: NetMe
请求时加上了,可如果是:Cookie:aa=bb,就加不上,找了好多地方,想找到答案,
最后在GOOGLE论坛里有人做了“解释”:
它问了微软的人,用该控件无法加COOKIE,FT!!!
code:
CString str="";
//this->m_editurl.GetWindowText(str);
//this->m_editurl.GetWindowText("http://localhost:8080/angel");
VARIANT varProject;
const char *pszMsg = "http://127.0.0.1:8080";
//const char *pszMsg1 = "User-Agent: NetAnts";
const char *pszMsg1 = "Cookie: JSESSIONID=0112BF7D0C9FD914716EE17AD2AD7913";
VARIANT p1;
VARIANT p2;
VARIANT p3;
VariantInit(&varProject);
VariantInit(&p1);
VariantInit(&p2);
VariantInit(&p3);
p2.vt = VT_BSTR;
p2.bstrVal = SysAllocString(A2BSTR(pszMsg));//_bstr_t("http://127.0.0.1:8080/angel");
CString *s = new CString(p2.bstrVal);
//AfxMessageBox((LPCTSTR)s);
varProject.vt = VT_BSTR;
p1.vt = VT_BSTR;
p1.bstrVal= SysAllocString(A2BSTR(pszMsg));
//CComBSTR bstrXml ;
//bstrXml.Attach(SysAllocStringLen(p,47));
//varProject.bstrVal = bstrXml;
varProject.bstrVal = SysAllocString(A2BSTR(pszMsg1));
this->m_ie.Navigate2(&p2,0,0,0,&varProject);
I'd like to add cookies when I call IWebBrowser2::Navigate.
For example:
SHDocVw::IWebBrowser2Ptr spBrowser;//already created
_variant_t vtEmpty;
_bstr_t bstrURL;// already set to valid URL;
_variant_t vCookie(_bstr_t("Cookie: foo = bar"));
spBrowser->Navigate
(
bstrURL,
&vtEmpty/*flags*/,
&vtEmpty/*frame*/,
&vtEmpty/*post data*/,
&vCookie/*headers*/
);
The cookie I set does not appear on the server. I assume that the
syntax I'm passing to the 'headers' argument of Navigate is incorrect,
but I see no documentation about exactly how to set 'headers'.
When I monitor the IE event BeforeNavigate2, it shows the 'header'
argument, which includes some garbled version of the characters I
put in vCookie.
Any help will be appreciated.
Thanks,
Paul Bradford
See RFC 2109. The óookie header is rather complex:
cookie = "Cookie:" cookie-version
1*((";" | ",") cookie-value)
cookie-value = NAME "=" VALUE [";" path] [";" domain]
cookie-version = "$Version" "=" value
NAME = attr
VALUE = value
path = "$Path" "=" value
domain = "$Domain" "=" value
For example:
Cookie: $Version="1"; Customer="WILE_E_COYOTE"; $Path="/acme"
$Version parameter is mandatory-- With best wishes, Igor Tandetnik
"Paul Bradford" <paulbradf...@alum.mit.edu> wrote in message
sf9$1@bob.news.rcn.net]news:9d9iud$sf9$1@bob.news.rcn.net...
- Hide quoted text -- Show quoted text -
- Hide quoted text -
- Show quoted text -
I set a breakpoint in BeforeNavigate2 and look at Headers. It contains
some of the characters from the 'headers' parameter in my call to
IWebBrowser::Navigate, but it's all garbled. There is something
about my 'headers' parameter to Navigate that is not correct, but
I don't know what.
What exactly should the 'headers' argument to IWebBrowser2::Navigate
look like?
In case anybody is interested, I went through Microsoft support
to find out more about this. Their answer: what I want to do is
not supported. The 'headers' argument to Navigate/Navigate2
CANNOT be used to set cookies. There is no way to set cookies
for an IWebBrowser2 object.
I consider this a bug, but what I think is unlikely to change anything :)
We solved my problem in a completely different way.