Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建cookie并在HttpURLConnection中使用它?_Java_Cookies_Httpurlconnection_Siteminder - Fatal编程技术网

Java 如何创建cookie并在HttpURLConnection中使用它?

Java 如何创建cookie并在HttpURLConnection中使用它?,java,cookies,httpurlconnection,siteminder,Java,Cookies,Httpurlconnection,Siteminder,我有下面的python代码,它创建了一个cookie并将其添加到会话中。使用HttpURLConnection的等效java代码是什么?我基本上希望使用生成的cookie执行HTTP POST请求 session = requests.session() session.auth = (username, password) try: token = session.get(SITEMINDER_URL % server, verify=False)

我有下面的python代码,它创建了一个cookie并将其添加到会话中。使用HttpURLConnection的等效java代码是什么?我基本上希望使用生成的cookie执行HTTP POST请求

    session = requests.session()
    session.auth = (username, password)
    try:
        token = session.get(SITEMINDER_URL % server, verify=False)
        session.cookies.update(dict(SMSESSION=json.loads(token.content)['SMSESSION']))
    except Exception as ex:
        raise Exception("Failed in authenticating with siteminder", ex)
    response = session.post(api_url, headers=headers, verify=False, json=data)

您可以使用如下内容:

HttpURLConnection httpconn = < some source to get a HttpURLConnection >;
String cookieName = "SMSESSION"; // note this is the default but SM can use other prefixes
String cookieValue = < your token content >;
httpurl.setRequestProperty("Cookie", cookieName + "=" + cookieValue);
HttpURLConnection-httpconn=;
字符串cookieName=“SMSESSION”//注意这是默认值,但是SM可以使用其他前缀
字符串cookieValue=<您的令牌内容>;
setRequestProperty(“Cookie”,cookieName+“=”+cookieValue);
另外,从javadocs中可以看出:注意:HTTP要求合法地拥有多个具有相同密钥的实例的所有请求属性使用逗号分隔的列表语法,该语法允许将多个属性附加到单个属性中


这让我指出,直接使用HttpUrlConnection确实很笨拙。我建议您查看HTTP客户端库,如Apache HTTP客户端。在我看来,您只需创建一个HttpUrlConnection对象,分配cookie的
列表,如下所示:

List<String> cookies = new ArrayList<>();
//Or using a map With entries: Key and value for each cookie
cookies.add("User-Agent=MyUserAgent"); //etc...
URL site = new URL("https://myurl.com");
HttpsURLConnection conn = (HttpsURLConnection) site.openConnection();
for (String string: cookies) {
        conn.setRequestProperty("Cookie", string);
}
List cookies=new ArrayList();
//或者使用带有条目的映射:每个cookie的键和值
添加(“用户代理=我的用户代理”)//等
URL站点=新URL(“https://myurl.com");
HttpsURLConnection conn=(HttpsURLConnection)site.openConnection();
用于(字符串:cookies){
conn.setRequestProperty(“Cookie”,字符串);
}

但是,这是最简单但不是最好的方法。

要获得更高的Cookie抽象,请使用CookieManager和CookieStore类。以下是一个例子:

HttpURLConnection connection
CookieManager cookieManager = new CookieManager();
HttpCookie cookie = new HttpCookie("cookieName","cookieValue");

cookieManager.getCookieStore().add(null,cookie);

connection.setRequestProperty("Cookie", String.join( ";", cookieManager.getCookieStore().getCookies()));  
试试这个:

    URL url = new URL("http://www.example.com");
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();

    conn.setRequestProperty("Cookie", "name1=value1; name2=value2");

    conn.connect();

谢谢你的回复!如何使用siteminder url在java中实际生成令牌内容。正如您在我的问题中的python代码中所看到的,它是在以下两行中生成的:
token=session.get(SITEMINDER\u URL%server,verify=False)session.cookies.update(dict(SMSESSION=json.loads(token.content)['SMSESSION'])
我不熟悉python代码。登录SiteMinder有很多方法-HTTP Basic、基于表单的登录等,这取决于您的站点的配置方式