এইচটিটিপিআরএল সংযোগের জন্য শিরোনাম যুক্ত করা হচ্ছে


253

আমি আমার অনুরোধটি ব্যবহার করে শিরোনাম যুক্ত করার চেষ্টা করছি HttpUrlConnectionতবে পদ্ধতিটি setRequestProperty()কাজ করছে বলে মনে হচ্ছে না। সার্ভার পক্ষটি আমার শিরোলেখের সাথে কোনও অনুরোধ গ্রহণ করবে না।

HttpURLConnection hc;
    try {
        String authorization = "";
        URL address = new URL(url);
        hc = (HttpURLConnection) address.openConnection();


        hc.setDoOutput(true);
        hc.setDoInput(true);
        hc.setUseCaches(false);

        if (username != null && password != null) {
            authorization = username + ":" + password;
        }

        if (authorization != null) {
            byte[] encodedBytes;
            encodedBytes = Base64.encode(authorization.getBytes(), 0);
            authorization = "Basic " + encodedBytes;
            hc.setRequestProperty("Authorization", authorization);
        }

আমার জন্য কাজ করে, আপনি কীভাবে বলবেন যে হেডার পাঠানো হয়েছিল এবং গৃহীত হয়নি?
টমাসজ নুরকিউইকজ

1
দুঃখিত, যদি এই বোবা connect()লাগছে তবে আপনি ইউআরএল সংযোগে কোথায় ফোন করছেন?
ভিকডোর

আমি নিশ্চিত না যে এর কোনও প্রভাব আছে কিনা তবে আপনি যুক্ত করার চেষ্টা করতে পারেন connection.setRequestMethod("GET");(বা পোস্ট বা আপনি যা চান)?
noobed

1
আপনি authorizationখালি স্ট্রিংয়ের শুরু করুন। যদি হয় usernameবা passwordনাল হয় authorizationতবে শূন্য স্ট্রিংটি নাল নয়। অতএব, ফাইনালটি ifকার্যকর করা হবে তবে "Authorization"সম্পত্তি খালি সেট করা হবে বলে মনে হয়।
জেরজেভুল

উত্তর:


422

আমি অতীতে নিম্নলিখিত কোডগুলি ব্যবহার করেছি এবং এটি টমক্যাটে সক্ষম বেসিক প্রমাণীকরণের সাথে কাজ করেছে:

URL myURL = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();

String userCredentials = "username:password";
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));

myURLConnection.setRequestProperty ("Authorization", basicAuth);
myURLConnection.setRequestMethod("POST");
myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
myURLConnection.setRequestProperty("Content-Length", "" + postData.getBytes().length);
myURLConnection.setRequestProperty("Content-Language", "en-US");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);

আপনি উপরের কোড চেষ্টা করতে পারেন। উপরের কোডটি পোষ্টের জন্য এবং আপনি এটি জিইটি-র সংশোধন করতে পারেন


15
অ্যান্ড্রয়েড বিকাশকারীদের জন্য কিছু সংযোজন (এপিআই> = 8 ওরফে ২.২): android.util.Base64.encode (ইউজারক্রেনডেন্টালস.বিটবাইটস), বেস64.DEFAULT); বেস64. ডিএফএলএফটি বেস 64 এনকোডিংয়ের জন্য আরএফসি2045 ব্যবহার করতে বলে।
ডেনিস গ্ল্যাডকি

@ ডেনিস, আপনি দয়া করে আমাকে বলবেন কেন কারও শিরোনাম ব্যবহার করা উচিত। অ্যান্ড্রয়েডের কিছু শংসাপত্রগুলি আমাকে xammp এ পিএইচপি ব্যবহার করছি যাচাই করতে হবে। আমি কিভাবে এটির জন্য যেতে হবে। যেমন আমি কীভাবে শিরোনামগুলির সাথে পিএইচপি কোড লিখতে জানি না
পঙ্কজ নিমগাদে

11
postDataআপনার উদাহরণে চলকটি কোথা থেকে এসেছে?
গ্লেনপিটারসন

22
সবাই যখন তাদের হেডার বলবে তখন কেন তাদের "অনুরোধপ্রাপ্তি" বলা হয় ??
ফিলিপ রেগো

2
জাভা 8 সংস্করণের জন্য একটি সংযোজন: বেস 64 ক্লাসটি কিছুটা পরিবর্তিত হয়েছে। ডিকোডিংটি ব্যবহার করে করা উচিত:String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
মিহাইলো স্টুপার

17

উপরের উত্তরে আমি এই বিট তথ্যটি না দেখতে পাচ্ছি, কোড স্নিপেট মূলত পোস্ট করার কারণটি encodedBytesভেরিয়েবল একটি byte[]এবং Stringমান নয় not আপনি পাস যদি byte[]একটি থেকে new String()নীচে, কোড স্নিপেট ঠিকভাবে কাজ।

encodedBytes = Base64.encode(authorization.getBytes(), 0);
authorization = "Basic " + new String(encodedBytes);

11

আপনি যদি জাভা 8 ব্যবহার করছেন তবে নীচের কোডটি ব্যবহার করুন।

URLConnection connection = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) connection;

String basicAuth = Base64.getEncoder().encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8));
httpConn.setRequestProperty ("Authorization", "Basic "+basicAuth);

6

অবশেষে এটি আমার পক্ষে কাজ করেছিল

private String buildBasicAuthorizationString(String username, String password) {

    String credentials = username + ":" + password;
    return "Basic " + new String(Base64.encode(credentials.getBytes(), Base64.DEFAULT));
}

2
@ d3dave। স্ট্রিং বাইট অ্যারে থেকে তৈরি করা হয়েছিল এবং "বেসিক" দিয়ে একত্রীকরণ করা হয়েছিল। ওপি কোডের সমস্যাটি হ'ল তিনি "বুনিয়াদি" বাইট []] এর সাথে সম্মতি দিয়েছিলেন এবং এটি শিরোনাম হিসাবে প্রেরণ করেন।
ইয়ুরিন

5

আপনার কোডটি ভাল You আপনি একই জিনিসটি এইভাবে ব্যবহার করতে পারেন।

public static String getResponseFromJsonURL(String url) {
    String jsonResponse = null;
    if (CommonUtility.isNotEmpty(url)) {
        try {
            /************** For getting response from HTTP URL start ***************/
            URL object = new URL(url);

            HttpURLConnection connection = (HttpURLConnection) object
                    .openConnection();
            // int timeOut = connection.getReadTimeout();
            connection.setReadTimeout(60 * 1000);
            connection.setConnectTimeout(60 * 1000);
            String authorization="xyz:xyz$123";
            String encodedAuth="Basic "+Base64.encode(authorization.getBytes());
            connection.setRequestProperty("Authorization", encodedAuth);
            int responseCode = connection.getResponseCode();
            //String responseMsg = connection.getResponseMessage();

            if (responseCode == 200) {
                InputStream inputStr = connection.getInputStream();
                String encoding = connection.getContentEncoding() == null ? "UTF-8"
                        : connection.getContentEncoding();
                jsonResponse = IOUtils.toString(inputStr, encoding);
                /************** For getting response from HTTP URL end ***************/

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

        }
    }
    return jsonResponse;
}

এর রিটার্ন প্রতিক্রিয়া কোড 200 যদি অনুমোদন সাফল্য হয়


1

সঙ্গে RestAssurd আপনার কাছে নিম্নলিখিতগুলি করতে পারেন:

String path = baseApiUrl; //This is the base url of the API tested
    URL url = new URL(path);
    given(). //Rest Assured syntax 
            contentType("application/json"). //API content type
            given().header("headerName", "headerValue"). //Some API contains headers to run with the API 
            when().
            get(url).
            then().
            statusCode(200); //Assert that the response is 200 - OK

1
আপনি কি কোডটি আরও পরিষ্কারভাবে এখানে ফর্ম্যাট করতে আপত্তি করেন? এছাড়াও, কী হওয়ার given()কথা?
নাথানিয়েল ফোর্ড

হাই, এটি রেস্ট-অ্যাসুরডের জন্য বেস ব্যবহার (পরীক্ষার বাকী এপিআই)। আমি কোডটি ব্যাখ্যা ব্যাখ্যা।
ইয়াল সুলিমান

-1

পদক্ষেপ 1: এইচটিপিআরএল সংযোগ অবজেক্ট পান

URL url = new URL(urlToConnect);
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();

পদক্ষেপ 2: সেটরেউকোস্টপ্রোপার্টি পদ্ধতিটি ব্যবহার করে এইচটিটিপিআরএল সংযোগে শিরোনাম যুক্ত করুন।

Map<String, String> headers = new HashMap<>();

headers.put("X-CSRF-Token", "fetch");
headers.put("content-type", "application/json");

for (String headerKey : headers.keySet()) {
    httpUrlConnection.setRequestProperty(headerKey, headers.get(headerKey));
}

রেফারেন্স লিঙ্ক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.