1

Rest Webservice で POST を実行したい。サービスは NetweaverGateway を使用して構築され、SAP バックエンドに使用されます。投稿を行うには、最初に Fetch としてヘッダー 'X-CSRF' 値を使用して GET を実行する必要があります。このヘッダーの値を取得し、POST 中に渡す必要があります。また、Set-Cookie の値も取得します。 header.POST 中に Cookie ヘッダーとして適用する必要があります。

Windows Phone の場合、Set-Cookie ヘッダーの値は以下のとおりです。

MYSAPSSO2=AjQxMDMBABhBAFAAUABEAEUAVgBFAEwATwBQACAAIAACAAY4ADAAMAADABBJAEQANQAgACAAIAAgACAABAAYMgAwADEANAAwADEAMQA0ADEAMgAzADcABQAEAAAACAYAAlgACQACRQD%2fAVYwggFSBgkqhkiG9w0BBwKgggFDMIIBPwIBATELMAkGBSsOAwIaBQAwCwYJKoZIhvcNAQcBMYIBHjCCARoCAQEwbzBkMQswCQYDVQQGEwJERTEcMBoGA1UEChMTU0FQIFRydXN0IENvbW11bml0eTETMBEGA1UECxMKU0FQIFdlYiBBUzEUMBIGA1UECxMLSTAwMjA1NzgyMDkxDDAKBgNVBAMTA0lENQIHIBIRIAZSCDAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTQwMTE0MTIzNzI2WjAjBgkqhkiG9w0BCQQxFgQUl9pQNO3%21xAL961k5uldlrK9v4F4wCQYHKoZIzjgEAwQvMC0CFQC1Y2P0KidZPdz9cEDXfcJQXfaZHQIUSrgfviQp8crDmko2WfC5fRDIgLc%3d; パス=/; ドメイン=.168.3.10、SAP_SESSIONID_ID5_800=2kvgSUGIpZ2YFXaubeuff5zTKwp9GBHjn-AAJlUa2wA%3d; パス=/

Windows コンソール アプリケーションの場合、Set-Cookie ヘッダーの値は次のとおりです。

MYSAPSSO2=AjQxMDMBABhBAFAAUABEAEUAVgBFAEwATwBQACAAIAACAAY4ADAAMAADABBJAEQANQAgACAAIAAgACAABAAYMgAwADEANAAwADEAMQA0ADEAMgAzADkABQAEAAAACAYAAlgACQACRQD%2fAVYwggFSBgkqhkiG9w0BBwKgggFDMIIBPwIBATELMAkGBSsOAwIaBQAwCwYJKoZIhvcNAQcBMYIBHjCCARoCAQEwbzBkMQswCQYDVQQGEwJERTEcMBoGA1UEChMTU0FQIFRydXN0IENvbW11bml0eTETMBEGA1UECxMKU0FQIFdlYiBBUzEUMBIGA1UECxMLSTAwMjA1NzgyMDkxDDAKBgNVBAMTA0lENQIHIBIRIAZSCDAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTQwMTE0MTIzOTIyWjAjBgkqhkiG9w0BCQQxFgQU7c96Mnc03Z93lKsX929FWOrxYdswCQYHKoZIzjgEAwQvMC0CFQDXaD%2frrpLCCvzU85bLT1Km4NBUgAIUUwVjlcngGRjw5O3iPAr8GST2Oww%3d; パス=/; ドメイン=.168.3.10,SAP_SESSIONID_ID5_800=dbbs5TYL4SVjK4oZuPu5W-RZtwh9GBHjn-AAJlUa2wA%3d; path=/,sap-XSRF_ID5_800=3_UuV7y6z8bidVbm0rszQQ%3d%3d20140114123922ryOO43OgtywearpQUbML8YgnytbuW3-Qs0Jt4tuOgcc%3d; パス=/; HttpOnly

POST を行うには、Set-Cookie からの sap-XSRF_ID5_800 ヘッダー値が必要です。残念ながら、Windows Phone の場合、そのような値はありません。また、投稿中に認証エラーが発生します。

コンソールアプリケーションの場合も同様です。

これに関して助けが必要です。ここで指定された解決策を試してみ ました Windows Phone で HTTPOnly Cookie を保持する

しかし、私はクッキーにアクセスできません。

アップデート:

以下は私のコードです

    string xToken = "";
                byte[] auth = Encoding.UTF8.GetBytes(UserName + ":" + Pwd);
                string postXml = "xml to post";


                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.example.com/Headers");

                byte[] byteArray = Encoding.UTF8.GetBytes(postXml);
                request.ContentType = "application/atom+xml";
                request.Method = "GET";
                request.Headers["Authorization"] = "Basic " + System.Convert.ToBase64String(auth);
                request.Headers["X-CSRF-Token"] = "Fetch";



                HttpWebResponse responseH = (HttpWebResponse)request.GetResponse();
                xToken = responseH.Headers["X-CSRF-Token"];
                responseH.Close();
                request.Method = "POST";
                request.Headers["Authorization"] = "Basic " +    System.Convert.ToBase64String(auth);
                request.Headers["X-CSRF-Token"] = xToken;

 Stream dataStream1 = request.GetRequestStream();
                dataStream1.Write(byteArray, 0, byteArray.Length);
                dataStream1.Close();
                HttpWebResponse response1 = (HttpWebResponse)request.GetResponse();
                Console.WriteLine(((HttpWebResponse)response1).StatusDescription);
                dataStream1 = response1.GetResponseStream();
                StreamReader reader1 = new StreamReader(dataStream1);
                string responseFromServer1 = reader1.ReadToEnd();
                Console.WriteLine(responseFromServer1);
                Console.Read();
                reader1.Close();
                dataStream1.Close();
                response1.Close();
4

1 に答える 1

0

Cookie にアクセスすることは想定されておらず、アクセスする必要もありません。GET を作成したのと同じ HttpClient のインスタンスを使用して POST を作成する限り、それらは CookieContainer を持つ同じ HttpClientHandler を共有します。

GET への応答の Set-Cookie ヘッダーによって Cookie コンテナーに Cookie が追加され、次の POST (同じ HttpClient インスタンスを使用) で Cookie がヘッダーに追加されます。

于 2014-01-14T13:53:25.507 に答える