Http Basic Authentication в Java с использованием HttpClient?

Попробуйте это:

data = f.flatMap(lambda x: x.split(' '))
map = data.map(lambda x: (x, 1))
mapreduce = map.reduceByKey(lambda x,y: x+y)
result = mapreduce.collect()

Обратите внимание, что при запуске collect () RDD - это распределенный набор данных, агрегируется в узле драйвера и по существу преобразуется в список. Таким образом, очевидно, что собирать () набор данных 2T не рекомендуется. Если вам нужно всего несколько образцов из вашего RDD, используйте take (10).

141
задан Legend 19 July 2010 в 17:21
поделиться

3 ответа

Хорошо, это работает. На всякий случай, вот версия, которая мне подходит :)

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;


public class HttpBasicAuth {

    public static void main(String[] args) {

        try {
            URL url = new URL ("http://ip:port/login");
            String encoding = Base64.getEncoder().encodeToString(("test1:test1").getBytes(‌"UTF‌​-8"​));

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setRequestProperty  ("Authorization", "Basic " + encoding);
            InputStream content = (InputStream)connection.getInputStream();
            BufferedReader in   = 
                new BufferedReader (new InputStreamReader (content));
            String line;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        } catch(Exception e) {
            e.printStackTrace();
        }

    }

}
109
ответ дан 23 November 2019 в 22:33
поделиться

Вот несколько моментов:

  • Вы можете рассмотреть возможность обновления до HttpClient 4 (вообще говоря, если вы можете, я не думаю, что версия 3 все еще активно поддерживается).

  • Код состояния 500 - это ошибка сервера, поэтому может быть полезно посмотреть, что говорит сервер (есть ли подсказка в теле ответа, который вы печатаете?). Хотя это может быть вызвано вашим клиентом, сервер не должен отказывать таким образом (код ошибки 4xx будет более подходящим, если запрос неверен).

  • Я думаю, что по умолчанию используется setDoAuthentication (true) (не уверен). Что может быть полезно попробовать, так это то, что упреждающая аутентификация работает лучше:

     client.getParams (). SetAuthenticationPreemptive (true);
    

В остальном, основное различие между curl -d "" и тем, что вы делаете на Java, заключается в том, что, помимо Content-Length: 0 , curl также отправляет Content-Type: application / x-www-form-urlencoded . Обратите внимание, что с точки зрения дизайна вам, вероятно, в любом случае следует отправить объект с запросом POST .

7
ответ дан 23 November 2019 в 22:33
поделиться

Пробовали ли вы это (используя HttpClient версии 4):

String encoding = Base64Encoder.encode(user + ":" + pwd);
HttpPost httpPost = new HttpPost("http://host:post/test/login");
httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding);

System.out.println("executing request " + httpPost.getRequestLine());
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
173
ответ дан 23 November 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: