質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

2回答

1659閲覧

Invoke-WebRequestでリクエストしてHTTPステータスコード301を取得したい。

yuki1111

総合スコア72

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2022/12/15 16:03

前提

Powershellでテキストファイルから100以上のURLを読み込み、
それぞれにリクエストして、1度リダイレクトされHTTPステータスコード301を返すことを確認しようとしています。

実現したいこと

とりあえずInvoke-WebRequestで以下の2つのリダイレクトするページにリクエストを送り、
HTTPステータスコード301を取得したいです。
https://jurassic-design.com/redirect-sample-page/
https://impreatesoft.jp/sample/sample2.html

お手数ですが、ご教示の程宜しくお願いします。

発生している問題・出力されるログ

HTTPステータスコード200が返ってきてしまいます。

{"Date":"2022年12月15日 23:47:54","Url":"https://impreatesoft.jp/sample/sample2.html","StatusCode":200} {"Date":"2022年12月16日 0:42:34","Url":"https://jurassic-design.com/redirect-sample-page/","StatusCode":200}

該当のソースコード

$validStatusCode = 301 $logFile = "./RedirectCheck.log" $max = 0 $urlArray = Get-Content "C:\git\ps\redirect.txt" #URL確認用 # foreach ($str in $urlArray) { # Write-Host $str # } foreach ($url in $urlArray) { #レスポンスを取得する $response = try { Invoke-WebRequest -Uri $url -MaximumRedirection $max } catch { $_.Exception.GetBaseException().Response.StatusCode.Value__ } $statusCode = $response.StatusCode $header = $response.Headers Write-Host $response Write-Host $header Write-Host $statusCode #ステータスコードが200になる if ($statusCode -eq $validStatusCode) { #ログファイルがあるかを確認する if (-not(Test-Path $logFile)) { #ログファイルを作る New-Item -Path $logFile } #ファイルは後からコマンドから読みやすいようにJSONとする $json = [ordered]@{ Date = (Get-Date).ToString("F") Url = $url StatusCode = $statusCode } | ConvertTo-Json -Compress } }

バージョン

PSVersion:5.1.22000.1335

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/12/15 23:29 編集

解答欄に移しました。
退会済みユーザー

退会済みユーザー

2022/12/17 22:18

質問者さん、回答したのでフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。
yuki1111

2022/12/17 23:37

失礼しました。 私事ですが、仕事と格闘技の試合をするのに頭が一杯で遅くなりました。 申し訳ありません。
guest

回答2

0

-MaximumRedirection 0であれば、301が返っていれば301が得られるはずです。
curlコマンドで確認しましょう。
301であれば、下記のようになります。

cmd

1D:\Work> curl http https://example.com/foo 2<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 3<html><head> 4<title>301 Moved Permanently</title> 5</head><body> 6<h1>Moved Permanently</h1> 7<p>The document has moved <a href="https://example.com/foo/">here</a>.</p> 8</body></html> 9D:\Work>

投稿2022/12/16 00:59

otn

総合スコア84507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki1111

2022/12/17 23:34

ご回答ありがとうございます。
guest

0

ベストアンサー

HTTPステータスコード301を取得したいです。

Powershell = クライアント側の話ですよね。200 応答も 301 応答も web サーバーが返すもので、クライアント側では何ともならないはずですが?

投稿2022/12/15 23:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki1111

2022/12/17 23:33

ありがとうございます。はい、クライアント側の話です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問