2017-11-21 19 views
0

저는 Woocommerce 사이트와 소매 POS 시스템 간의 통합 프로젝트에 중매인입니다. POS가 Woocommerce 상점과 제품을 동기화하려고합니다. 사이트에는 SLL 인증서가 있으므로 모든 통신은 SSL을 통해 이루어집니다. POS 공급 업체는 TLS1.2를 사용하고 있다고 알려줍니다. 우리는 여기에 전체 URL을 붙여 넣을 수 없기 때문에 고객 키와 비밀을 포함하는 URL을 가지고 있지만 문제는 다음과 같습니다 ...브라우저에서 HttpClient와 WebClient가 401 오류를 발생 시키지만 직접 연결을 제공합니다.

브라우저에 직접 붙여진 동일한 URL이 예상대로 작동합니다 JSON 페이로드. .NET WebClient 또는 HttpClient와 동일한 URL이 401 Not Authorized 오류를 반환합니다. 다음은 WebClient를 사용한 통합 테스트의 예입니다.

[Test] 
public void DownloadString_UsingWebClient_ReturnsNonEmptyResponse() 
{ 
    using (var client = new WebClient()) 
    { 
     var response = client.DownloadString("https://demostore.mycompany.com.au/wp-json/wc/v2/settings/tax/woocommerce_prices_include_tax?consumer_key=ck_xxxskeyxxx&consumer_secret=cs_xxxsecretxxx"); 

     Assert.IsNotEmpty(response); 
    } 

} 

다음은 HttpClient를 사용한 유사한 테스트입니다.

두 테스트는 결코 Assert에 도달하지 않습니다. 똑같은 URL을 사용하여 브라우저에 붙여 넣으면 모든 것이 예상대로 작동합니다. 보안 프로토콜 유형을 적용하는 것을 포함하여 몇 가지 다른 작업을 시도했지만 (실제로 후자의 경우와 같이) 실제로는 어둠 속의 찌르다.

웹 사이트는 최신 버전의 Wordpress를 사용하고 있으며 공유 Linux 호스팅 환경에 있습니다.

WebClient 및 HttpClient에 누락 된 것이 있습니까? 웹 호스팅 회사로 돌아가서 .NET 클라이언트가 브라우저와 동일한 기능을 수행하지 못하게하는 구성이 있는지 확인합니다 (이 효과에 대한 지원 티켓을 기록했지만, 어떤 간판이라도)?

+0

401 권한이 필요합니다. 즉, 요청에 인증 쿠키를 추가해야 할 수 있습니다. – Shcherban

+0

'User-Agent' 헤더를 추가하십시오. – zaitsman

+0

와우 - 나는 둘 다 무슨 뜻인지 구글에 가야했지만, 사용자 에이전트 헤더를 추가하는 것이 트릭을 만들었다. 이제 코멘트가 @zaitsman에 있다면 답변을 어떻게 표시합니까? – Damo

답변

0

일반적으로 브라우저에서 작동하지만 외부에서 작동하지 않는 경우 API에서 요청에 User-Agent 헤더가 있음을 알 수 있습니다.

이유 중 하나는 해당 API 앞에있는 역방향 프록시/방화벽 일 수 있습니다.

0

회사 네트워크에서 브라우저가 작동하고 코드가 아닌 경우 WebClient 또는 HttpClient 인스턴스의 프록시 설정이 누락되었을 수 있습니다.

일반적으로 및 UseDefaultCredentials = true의 인스턴스는 HttpClientHttpClientHandler 인스턴스를 전달합니다.

+0

기업 네트워크에는 없지만 향후 사용을 위해이 제품을 배치 할 예정입니다. 감사합니다. – Damo