2017-01-12 7 views
1

Powershell을 사용하여 5.0.10586.117 로그인 할 양식이 포함 된 특정 웹 사이트 (IIS 8.5)를 요청하고 싶습니다. 여기에 특정 코드는 다음과 같습니다Powershell-command Invoke-webrequest 로그인 양식이 응답하지 않는다

$Url = Invoke-Webrequest -Uri "https://not-work/hello.aspx" -SessionVariable SesVar 
$UrlForm = $Url.Forms[0] 

그래서 파워 쉘 중단을하고 결코만큼 내가 수동으로 방해하지 않는 한 아무 것도 반환합니다.

VERBOSE: Get https://not-work/hello.aspx with 0-byte payload.

작동 구글 크롬 55.0.2883.87에서 동일한 웹 사이트를 실행 :

$Url = Invoke-Webrequest -Verbose -Uri "https://not-work/hello.aspx" -SessionVariable SesVar 

나는 다음과 같은 오류를 볼 수 있습니다 사용

. 이전 버전의 응용 프로그램 코드를 다른 (이전 버전의 IIS와는 달리) Powershell에서도 사용할 수 있습니다.

이 문제가 Powershell의 bug과 관련이 있다면 궁금합니다.

참고 : 실패

$Url = Invoke-Webrequest -UseBasicParsing -Verbose -Uri "https://not-work/hello.aspx" -SessionVariable SesVar 

를 사용하더라도. 완성도를 위해서

, 도 (크롬처럼) HTTP 상태 코드 (200)를 제공하지만, 작업 버전에 비해 약간의 차이가 말림 :

비 운영중인 웹 사이트

C:\Tools\curl>curl -k https://not-work/hello.aspx -I HTTP/1.1 200 OK 
Cache-Control: private 
Content-Length: 12671 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/8.5 X-AspNet-Version: 4.0.30319 
Set-Cookie: __AntiXsrfToken=d438e79fe7004ad09d950a3b8b4e507d; path=/; HttpOnly 
Set-Cookie: .ASPXAUTH=; expires=Mon, 11-Oct-1999 22:00:00 GMT; path=/; HttpOnly 
X-Powered-By: ASP.NET 
Date: Thu, 12 Jan 2017 13:57:33 GMT 

전문 웹 사이트

C:\Tools\curl>curl -k https://works-well/hello.aspx -I HTTP/1.1 200 OK 
Cache-Control: private Content-Length: 12306 Content-Type: text/html; charset=utf-8 
X-Frame-Options: SAMEORIGIN 
X-Content-Type-Options: nosniff 
Server: WWW Server/1.1 X-XSS-Protection: 1; mode=block 
Set-Cookie: __AntiXsrfToken=6142de1c5d474da780530da39fea033f; path=/;HttpOnly; Secure 
Date: Thu, 12 Jan 2017 15:56:47 GMT 

그런데 Internet Explorer (IE) 11.0.9600.18537에서는 이미지와 같은 객체가로드되지 않습니다. Powershell은 IE DLL을 사용하여 "두포 모드"에서 작동합니다. "모래 시계"는 탭 옆에 영구적으로 실행 중입니다. 요구 된 URI

다시 질문 :이 문제는 Powershell에서 bug과 관련이 있습니까? 아니면 다른 것이 될 수 있습니까?

답변

1

동일한 자연 상태의 문제를 해결하고 있습니다. 내 웹 사이트에서 몇 가지 사항이 변경된 것으로 보입니다. 그 중 하나는 FORMS입니다.

웹 사이트에 FORMS 옵션이 있는지 확인할 수 있습니까?

EX.

#GET WEBSESSION 
$url = "https://myaccount.nytimes.com/" 
$r = Invoke-WebRequest -Uri $url -SessionVariable ws -UseBasicParsing 
return $r 

유의할 점은 -UseBasicParsing입니다. 내 nytimes 예를 들어 내가해야합니다. 이것은 nytimes가 JS를 사용하고 PS를 위해 잘 돌아 가지 않는 것 같기 때문입니다. -UseBasicParsing을 제거하면 WebRequest가 중단됩니다.

위의 반환과 함께 'FORMS :'가 null임을 알 수 있습니다.

지금은 해결책이 없습니다. 다른 말로하면, 내 웹 사이트에는 자격 증명이 필요하며 분명히 제공해야합니다.그래서 지금은 -Body $ bodyParam @ {}과 -Headers $ headerParams @ {}를 사용하여 다른 시도의 돌연변이를 쓰고 있습니다. 지금까지는 아무 소용이 없습니다.

간단히 말해, PS는 JS 유형 웹 사이트에서 제대로 작동하지 않는 것으로 보이며 FORMS는 모든 유형 사이트가 아닌 특정 웹 사이트 집합에만 사용되는 것으로 보입니다.

바라건대 숙련 된 사람이 도움이 될 수 있기를 바랍니다.

+0

예, "내"웹 사이트에 FORMS 옵션이 있음을 확인할 수 있습니다. – Joey