5

アンダースコア(_)を含むパラメータを含むURLを投稿しています。

サンプル:http://sdsdsds_asasasahjhd.com/dsdsdsd/login.json?

私はそれをこのように投稿しています:

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://sdsdsds_asasasahjhd.com/dsdsdsd/login.json?");
    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("key1", "value1"));
        nameValuePairs.add(new BasicNameValuePair("key2", "value2"));
        nameValuePairs
                .add(new BasicNameValuePair("key3", "value3"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (Exception e) {
        e.printStackTrace();
    }

私が検査しているとき、私は例外の詳細httpclient.execute(httppost)を取得IllegalArgumentExceptionしてキャッチしていると言っていHost name cannot be nullます。解決策を指定してください。

私はここで他のいくつかの質問を経験しました:

しかし、私はURL全体をエンコードしていないので、役に立ちません。

4

4 に答える 4

1

ネットワーク実装メカニズムを備えたオープンソースライブラリがあります。レシーバーに回避策の実装があります。トラブルが発生した場合にリフレクションによってホストを設定するために必要なのは次のとおりです。

        final URI uriObj = new URI("https", host, path, null, null);
        if (uriObj.getHost() == null) {
            final Field hostField = URI.class.getDeclaredField("host");
            hostField.setAccessible(true);
            hostField.set(uriObj, host);
        }
        return uriObj;

コミットはここにあります。

于 2013-04-07T18:00:30.290 に答える
0

HttpPost httppost = new HttpPost(String);

このコンストラクターは、提供された文字列からURLインスタンスを形成しようとします。これが失敗した場合は、null値を処理することになります。

さらにサポートが必要な場合は、サンプルではなく、実際に使用しているURLを投稿してください。

于 2012-11-30T12:53:14.180 に答える
0

それは、ホスト名をnullにすることはできないことを明確に示しています。URLでホスト名が指定されていません。

URLは次の形式である必要があります

http://hostName.com/example..../example.json
于 2012-11-30T12:51:24.823 に答える
0

このリンクを参照してください。Apacheはアンダースコアをサポートしていません。URLを変更する必要があります

https://issues.apache.org/jira/browse/HTTPCLIENT-911

于 2013-07-30T13:58:34.270 に答える