如何解决使用 cookie 处理 4GL GET 请求
我必须向 API 发送一些数据,但此 API 的授权是通过 cookie 进行的。所以为了发送数据,我必须发送我的用户名和密码,作为响应,我得到 cookie,在响应正文中,我得到元素“sessionID”,其中包含该 cookie 的字符串值。在每个下一个 API 请求中,我都需要使用该 cookie(或使用来自第一个 API 请求的存储字符串值创建它)。如何在我现有的 API 请求程序中制作/集成 cookie 功能?如果我使用 Postman 应用程序发出请求,它会自动保存第一个请求的 cookie 并在每个下一个请求中使用它。
我的问题的解决方案是:
我发送 GET 请求的程序如下。
USING System.Xml.* FROM ASSEMBLY.
USING System.Net.* FROM ASSEMBLY.
USING System.Collections.Specialized.* FROM ASSEMBLY.
ROUTINE-LEVEL ON ERROR UNDO,THROW.
/* *************************** DeFinitions ************************** */
DEFINE INPUT ParaMETER cLink AS CHaraCTER NO-UNDO.
DEFINE INPUT ParaMETER cUser AS CHaraCTER NO-UNDO.
DEFINE INPUT ParaMETER cPass AS CHaraCTER NO-UNDO.
DEFINE OUTPUT ParaMETER lcResponse AS LONGCHAR NO-UNDO.
DEFINE VARIABLE wcclient AS System.Net.WebClient NO-UNDO.
DEFINE VARIABLE nvValues AS System.Collections.Specialized.NameValueCollection NO-UNDO.
DEFINE VARIABLE whcResponse AS System.Net.WebHeaderCollection NO-UNDO.
DEFINE VARIABLE rsResponse AS "System.Byte[]" NO-UNDO.
DEFINE VARIABLE cRespHeader AS CHaraCTER NO-UNDO.
DEFINE VARIABLE wpProxy AS System.Net.WebProxy NO-UNDO.
/* *************************** Main Block *************************** */
wcclient = NEW System.Net.WebClient().
nvValues = NEW System.Collections.Specialized.NameValueCollection().
ASSIGN
nvValues["username"] = cUser
nvValues["password"] = cPass
.
rsResponse = wcclient:UploadValues(cLink,nvValues).
lcResponse = System.Text.Encoding:Default:GetString(rsResponse).
cRespHeader = System.Text.Encoding:Default:GetString(rsResponse).
DELETE OBJECT nvValues.
DELETE OBJECT rsResponse.
DELETE OBJECT wcclient.
找到了一些用于 cookie 的 C# 代码,但不知道如何将其集成到我的程序中。
CookieContainer cookieContainer = new CookieContainer();
System.Net.Cookie userNameCookie = new System.Net.Cookie("user","username");
System.Net.Cookie passwordCookie = new System.Net.Cookie("password","9848jf7s7ejhd");
cookieContainer.Add(userNameCookie);
cookieContainer.Add(passwordCookie);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(produkt);
request.CookieContainer = cookieContainer;
提前致谢
解决方法
接下来解决这个问题
wcClient:Headers:ADD("Cookie","value_of_cookie_including_name").
花了很多时间测试,终于成功了。希望这个回答有人能节省很多时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。