HttpsUrlConnection with Authorization似乎在GET请求中切断了url参数

时间:2013-12-03 13:41:59

标签: java parameters authorization httpsurlconnection

我正在尝试通过HTTPS建立连接。我还在Request Header中将“Authorization”属性设置为Basic,并相应地提供编码的auth字符串。

我检查了Firefox插件HttpRequester并且everythign工作正常,这意味着我输入了网址,选择“GET”作为请求方法,将授权添加到标题中,按下提交后我得到一些只有经过适当授权的xml用户应该得到。

不幸的是,我既不能提供实际的身份验证信息,也不能提供SSCCE中的真实网址。但是,我可以告诉你,Auth似乎有效,因为我收到200响应。我还将Auth更改为错误的值,然后获得“401 Authorization Required”响应。

实际上似乎“?myparam = xyz”被切断了,因为当我从url中删除此参数并再次使用Firefox HttpRequester进行测试时,我得到与Java相同的响应。

不幸的是我无法访问“hisdomain.com”,因此我不知道服务器端发生了什么。但由于它适用于Firefox HttpRequester,因此它也适用于Java。

可能是什么原因?谢谢你的帮助!

编辑: 我将网址更改为“https://www.google.com/search?q=foo”并对此行进行了评论:

//con.setRequestProperty("Authorization", auth);

我可以从返回的字符串中看到,google收到了“foo”。显然,Authorization和get参数的组合似乎是问题所在,因为两者分别正常工作。

SSCCE:

    import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

public class HttpRequest
{

    /**
     * @param args
     */
    public static void main(final String[] args)
    {
        System.out.println("start request");
        final String urlString = "https://theirdomain.com/foo/bar/bob?myparam=xyz";
        final String auth = "Basic XyzxYzxYZxYzxyzXYzxY==";

        HttpsURLConnection con;
        try
        {

            final URL url = new URL(urlString);

            con = (HttpsURLConnection) url.openConnection();
            con.setRequestProperty("Authorization", auth);
            con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");

            con.setRequestMethod("GET");
            //            con.setDoOutput(true);
            con.connect();
            final int responseCode = con.getResponseCode();
            if (responseCode != 200)
                System.out.println("Server responded with code " + responseCode + " " + con.getResponseMessage());
            else
            {
                System.out.println("Starting to read...");

                final InputStream inStream = con.getInputStream();
                final ByteArrayOutputStream baos = new ByteArrayOutputStream();

                int c;

                while (inStream != null && (c = inStream.read()) != -1)
                {
                    baos.write(c);
                }

                System.out.println(new String(baos.toByteArray()));
            }
        }
        catch (final IOException e)
        {
            System.out.println("could not open an HTTP connection to url: " + urlString);
            e.printStackTrace();
        }
        finally
        {
            System.out.println("end request");
        }
    }

}

1 个答案:

答案 0 :(得分:0)

您是否尝试过添加 con.setRequestProperty("myparam", "xyz");代码?