Hoe de ‘Ontbrekende vereiste aanvraagheader’ op te lossen. Moet een van de volgende specificeren: origin,x-requested-with’ Ajax Error

Ik probeer een ajax-aanroep uit te voeren vanaf mijn lokale machine naar een externe URL met behulp van de CORS overal url die voorafgaat aan de daadwerkelijke url/eindpunt. Dit resulteert echter in de ‘Ontbrekende vereiste aanvraagheader. Moet een van de volgende specificeren: origin,x-requested-with’-fout. Ik heb mijn header handmatig ingesteld zoals je hieronder in de code kunt zien, ik begrijp gewoon niet helemaal waarom dit nog steeds zou gebeuren nadat ik de ‘requested-with’-waarde expliciet had gedefinieerd.

       // Set URL to the Create patient endpoint
        const Url = 'https://cors-anywhere.herokuapp.com/https://staging.micromerchantsystems.com/mmsgatewayapistaging/api/patient/create';
        // Define User data here ** Currently static information **
        // Need to set variables based on input value to the correct identifier
        // EX: "FirstName": $('#first_name').val();
        const userData = {
            "RequestingClient": {
                "ClientId": "XXXXXXXXXX",
                "ClientSecret": "XXXXXXXXXX",
                "MemberId": "XXXXXXXXXX"
            },
            "Pharmacy": {
                "IdentifierType": 2,
                "Identifier": "5164086800"
            },
            "LastName": "Test",
            "MiddleInitials": "X",
            "FirstName": "Seth",
            "Gender": "M",
            "DOB": "01/01/1990",
            "Email": "[email protected]",
            "PhoneNumber": "1234567890",
            "MobileNumber": "1234567890",
            "BusinessNumber": "1234567890",
            "PatientIdentifiers": [
                { "IdentifierType": 1, "IdentifierType": "12345" }
            ],
            "AddressInformation": {
                "AddressType": 1,
                "StreetLine1": "123 Test",
                "StreetLine2": "",
                "City": "Waco",
                "State": "TX",
                "ZipCode": "76710",
            },
            "ExternalPatientId": "1234567890",
            "Timestamp": "2019-12-09T17:59:15.7624947Z"
        };
        // On button ajax call to create a new user with the above data
        $('.btn').click(function () {
            $.ajax({
                url: Url,
                type: "POST",
                dataType: "json",
                contentType: "application/json",
                // set the request header authorization to the bearer token that is generated
                headers: {
                    "X-Requested-With": "XMLHttpRequest",
                    "Authorization": "Bearer " + responseToken,
                },
                data: userData,
                success: function (result) {
                    console.table(result);
                    $('.output_userInfo').html(result.ErrorMessage);
                },
                error: function (error) {
                    console.log(`Error ${error}`)
                },
            });
        });

Antwoord 1, autoriteit 100%

Je stelt de header correct in, maar volgens de auteur van cors-anywherekun je om de volgende redenen fouten ervaren met betrekking tot het maken van verzoeken (zelfs na het instellen van de juiste headers):

p>

  • De URL die u wilt proxy is onbereikbaar(de site is bijvoorbeeld niet beschikbaar of ze hebben de toegang tot het CORS Anywhere IP geblokkeerd).
  • Er zijn te veel verzoeken verzonden naar CORS Anywhere door de opgegeven oorsprong binnen de opgegeven tijdsperiode(#45).
  • De URL zelf is op de zwarte lijst (bijv. # 32 , # 42 ).
  • Cors Nywhere is down. (d.w.z. dit is van toepassing als u zelfhosting bent)

Op basis van het maken van een verzoek aan uw doel-URL (https://staging.micromerchantsystems.com/), ik krijg een IIS-splash-scherm, dus misschien wilt u controleren of alles is Draai aan je einde. Met behulp van een zeer minimaal voorbeeld hieronder, was ik in staat om ogenschijnlijk op de juiste plaats te slaan, maar ontving echter een 401-fout, wat aangeeft dat ik niet geautoriseerd was (maar ik heb de vereiste bericht van 400 niet ontvangen):

$(function() {
  $.ajax({
    url: "https://cors-anywhere.herokuapp.com/https://staging.micromerchantsystems.com/mmsgatewayapistaging/api/patient/create",
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    // set the request header authorization to the bearer token that is generated
    headers: {
      "X-Requested-With": "XMLHttpRequest"
    },
    success: function(result) {
      console.log(result);
    },
    error: function(error) {
      console.log(`Error ${error}`)
    },
  });
});

Ik zou me voorstellen of u uw geschikte autorisatie-informatie opneemt, u moet toegang hebben. Als u nog steeds problemen ondervindt, wilt u misschien Overweeg het bereiken van de auteur Wie kan waarschijnlijk helpen bij het verder oplossen van het probleem verder.


Antwoord 2

Ik heb wat meer gegraven in de Postman-code die met succes kon worden uitgevoerd en kreeg daaruit het juiste antwoord. Dit is de code die ik heb gebruikt om de API correct uit te voeren en de informatie domeinoverschrijdend door te geven.

       // Set URL to the Create patient endpoint        
        const Url = "https://cors-anywhere.herokuapp.com/https://staging.micromerchantsystems.com/mmsgatewayapistaging/api/patient/create";
        // On button ajax call to create a new user with the above data
        $('.btn').click(function () {
            // The input value variables NEED to be defined and set after the click function
            // so that the value can be received and passed into the userData variable.
            // Define User data here ** Currently static information **
            // Need to set variables based on input value to the correct identifier
            // EX: "FirstName": $('#first_name').val();
            var user_firstName = $("#first_name").val();
            const userData = {
                "RequestingClient": {
                    "ClientId": "XXXXXX",
                    "MemberId": "XXXXXXX"
                },
                "Pharmacy": {
                    "IdentifierType": 2,
                    "Identifier": "XXXXXXX"
                },
                "LastName": "Test",
                "MiddleInitials": "X",
                "FirstName": user_firstName,
                "Gender": "M",
                "DOB": "01/01/1990",
                "Email": "[email protected]",
                "PhoneNumber": "1234567890",
                "MobileNumber": "1234567890",
                "BusinessNumber": "1234567890",
                "PatientIdentifiers": [
                    { "IdentifierType": 1, "IdentifierType": "12345" }
                ],
                "AddressInformation": {
                    "AddressType": 1,
                    "StreetLine1": "123 Test",
                    "StreetLine2": "",
                    "City": "Waco",
                    "State": "TX",
                    "ZipCode": "76710",
                },
                "ExternalPatientId": "1234567890",
                "Timestamp": "2019-12-09T17:59:15.7624947Z"
            };
            // Using stringify is an important part in successfully passing the data
            var userString = JSON.stringify(userData);
            var userSettings = {
                "async": true,
                "crossDomain": true,
                "url": Url,
                "method": "POST",
                "headers": {
                    "Content-Type": "application/json",
                    "Authorization": "Bearer " + responseToken,
                    "Accept": "*/*",
                },
                "data": userString
            }
            $.ajax(userSettings).done(function (response) {
                console.table(response);
            });
        });

Other episodes