2026.06.04 | youres | 25次围观
# curl鎵归噺妫€娴嬮噸瀹氬悜杈撳嚭CSV鏍煎紡鍖栨柟娉曪細3涓疄鎴樿剼鏈缃戠珯宸℃缁撴灉涓€鐩簡鐒?
浣犳湁娌℃湁閬囧埌杩囪繖绉嶆儏鍐碉細鎵嬮噷鏈夊嚑鍗佷釜URL闇€瑕佹鏌ラ噸瀹氬悜鏄惁姝g‘锛屼竴涓釜鎵嬪姩curl澶參锛岃緭鍑虹殑缁撴灉鍙堜贡涓冨叓绯燂紝鏍规湰娌℃硶缁欓瀵间氦宸紵
浠婂ぉ鎴戞潵鍒嗕韩3涓疄鎴樿剼鏈紝璁╀綘鐢╟url鎵归噺妫€娴嬮噸瀹氬悜锛岀劧鍚庢妸缁撴灉鏍煎紡鍖栬緭鍑哄埌CSV鏂囦欢锛屾棦娓呮櫚鍙堜笓涓氥€?
## 涓轰粈涔堣鎶奵url閲嶅畾鍚戞娴嬬粨鏋滆緭鍑哄埌CSV锛?
鍦ㄥ仛缃戠珯杩佺Щ銆佸煙鍚嶆洿鎹€佹垨鑰呮棩甯歌繍缁村贰妫€鏃讹紝鎴戜滑缁忓父闇€瑕侀獙璇佷竴澶ф壒URL鐨勯噸瀹氬悜鏄惁姝g‘銆傚鏋滃彧鐢╟url涓€涓釜鎵嬪姩娴嬶紝鏁堢巼浣庝笉璇达紝缁撴灉杩樻病娉曟矇娣€鍜屽垎浜€?
CSV鏍煎紡鐨勫ソ澶勬槸锛?- Excel/WPS鍙互鐩存帴鎵撳紑锛屾柟渚挎煡鐪嬪拰绛涢€?- 鍙互瀵煎叆鏁版嵁搴撴垨鐩戞帶绯荤粺鍋氳繘涓€姝ュ垎鏋?- 鏂逛究鍋氬巻鍙插姣旓紝鐪嬬湅閲嶅畾鍚戦厤缃湁娌℃湁琚汉鏀硅繃
## 鏍稿績鎬濊矾锛歝url -w 杈撳嚭閲嶅畾鍚戝彉閲?+ awk/sed鏍煎紡鍖?
curl鐨刞-w`锛堟垨`--write-out`锛夊弬鏁板彲浠ュ湪璇锋眰瀹屾垚鍚庤緭鍑烘寚瀹氱殑鍙橀噺銆傚拰閲嶅畾鍚戠浉鍏崇殑鍑犱釜鍏抽敭鍙橀噺鏄細
鍙橀噺 | 鍚箟
------|------
`%{url_effective}` | 鏈€缁堣烦杞埌鐨刄RL锛堥噸瀹氬悜缁堢偣锛?
`%{num_redirects}` | 閲嶅畾鍚戞鏁?
`%{http_code}` | 鏈€缁堝搷搴旂殑HTTP鐘舵€佺爜
`%{redirect_url}` | 鏈嶅姟鍣ㄨ繑鍥炵殑閲嶅畾鍚戠洰鏍嘦RL锛堜粎闄恅-L`鍙傛暟鏈娇鐢ㄦ椂锛?
瑕佹妸杩欎簺鍙橀噺杈撳嚭鍒癈SV锛屾牳蹇冩妧宸ф槸鐢╜-w`鎸囧畾杈撳嚭鏍煎紡锛岀劧鍚庣敤绠¢亾浼犵粰`awk`鎴朻sed`澶勭悊鎴怌SV琛屻€?
## 鑴氭湰涓€锛氬熀纭€鐗堚€斺€斿崟URL妫€娴嬭緭鍑篊SV鏍煎紡
鍏堜粠涓€涓畝鍗曠殑渚嬪瓙寮€濮嬶紝妫€娴嬪崟涓猆RL鐨勯噸瀹氬悜鎯呭喌骞惰緭鍑篊SV鏍煎紡锛?
#!/bin/bash
# 鍩虹鐗堬細妫€娴嬪崟涓猆RL鐨勯噸瀹氬悜锛岃緭鍑篊SV鏍煎紡
# 鐢ㄦ硶锛?/check_redirect.sh "https://example.com"
URL="$1"
if [ -z "$URL" ]; then
echo "鐢ㄦ硶: $0 "
exit 1
fi
# 鐢╟url -L -w 鑾峰彇閲嶅畾鍚戜俊鎭?# --max-redirs 10 闄愬埗鏈€澶氳拷韪?0娆¤烦杞?# -s 闈欓粯妯″紡锛?o /dev/null 涓嶄笅杞藉唴瀹?RESULT=$(curl -L --max-redirs 10 -s -o /dev/null \
-w "鍒濆URL: %{url_effective}\n璺宠浆娆℃暟: %{num_redirects}\n鏈€缁堢姸鎬佺爜: %{http_code}\n" \
"$URL" 2>/dev/null)
# 杈撳嚭CSV琛ㄥご锛堢涓€娆¤繍琛屾椂锛?if [ ! -f redirect_results.csv ]; then
echo "鍒濆URL,鏈€缁圲RL,璺宠浆娆℃暟,鏈€缁堢姸鎬佺爜" > redirect_results.csv
fi
# 鎻愬彇鏈€缁圲RL鍜岃烦杞鏁?FINAL_URL=$(echo "$RESULT" grep "鍒濆URL:" cut -d' ' -f2-)
NUM_REDIRECTS=$(echo "$RESULT" grep "璺宠浆娆℃暟:" awk '{print $2}')
HTTP_CODE=$(echo "$RESULT" grep "鏈€缁堢姸鎬佺爜:" awk '{print $2}')
# 鍐欏叆CSV锛堟敞鎰忓鐞哢RL涓殑閫楀彿锛岀敤鍙屽紩鍙峰寘瑁癸級
echo "\"$URL\",\"$FINAL_URL\",$NUM_REDIRECTS,$HTTP_CODE" >> redirect_results.csv
echo "缁撴灉宸插啓鍏?redirect_results.csv"
杩欎釜鑴氭湰鐨勯棶棰樻槸锛氬鏋淯RL涓寘鍚€楀彿锛堣櫧鐒跺皯瑙佷絾鍙兘鍙戠敓锛夛紝CSV浼氶敊浣嶃€傝В鍐冲姙娉曟槸鐢ㄥ弻寮曞彿鎶奤RL瀛楁鍖呰9璧锋潵銆?
## 鑴氭湰浜岋細杩涢樁鐗堚€斺€旀壒閲忔娴?閿欒澶勭悊+CSV鏍煎紡鍖?
瀹為檯宸ヤ綔涓紝鎴戜滑寰€寰€闇€瑕佹壒閲忔娴嬨€備笅闈㈡槸涓€涓洿瀹屽杽鐨勭増鏈細
#!/bin/bash
# 杩涢樁鐗堬細鎵归噺妫€娴婾RL閲嶅畾鍚戯紝杈撳嚭鏍煎紡鍖朇SV
# 鐢ㄦ硶锛?/batch_check_redirect.sh urls.txt
INPUT_FILE="$1"
OUTPUT_FILE="redirect_report_$(date +%Y%m%d_%H%M%S).csv"
if [ -z "$INPUT_FILE" ] || [ ! -f "$INPUT_FILE" ]; then
echo "鐢ㄦ硶: $0 "
echo "urls.txt 姣忚涓€涓猆RL"
exit 1
fi
# 鍐欏叆CSV琛ㄥご
echo "搴忓彿,鍒濆URL,鏈€缁圲RL,璺宠浆娆℃暟,鏈€缁堢姸鎬佺爜,鏄惁璺宠浆,妫€娴嬫椂闂? > "$OUTPUT_FILE"
counter=0
while IFS= read -r url || [ -n "$url" ]; do
# 璺宠繃绌鸿鍜屾敞閲婅
[[ -z "$url" || "$url" =~ ^# ]] && continue
((counter++))
# 鐢╟url妫€娴嬶紝-L 璺熼殢閲嶅畾鍚? # -w 杈撳嚭閲嶅畾鍚戝彉閲忥紝鐢═ab鍒嗛殧鏂逛究鍚庣画澶勭悊
RESPONSE=$(curl -L --max-redirs 10 -s -o /dev/null \
-w "%{url_effective}\t%{num_redirects}\t%{http_code}" \
"$url" 2>/dev/null)
# 瑙f瀽缁撴灉
FINAL_URL=$(echo "$RESPONSE" | cut -f1)
NUM_REDIRECTS=$(echo "$RESPONSE" | cut -f2)
HTTP_CODE=$(echo "$RESPONSE" | cut -f3)
# 鍒ゆ柇鏄惁鍙戠敓浜嗚烦杞? if [ "$NUM_REDIRECTS" -gt 0 ]; then
IS_REDIRECT="鏄?
else
IS_REDIRECT="鍚?
fi
# 鑾峰彇褰撳墠鏃堕棿
CHECK_TIME=$(date "+%Y-%m-%d %H:%M:%S")
# 鍐欏叆CSV锛圲RL鐢ㄥ弻寮曞彿鍖呰9锛岄槻姝㈤€楀彿闂锛? echo "\"$counter\",\"$url\",\"$FINAL_URL\",\"$NUM_REDIRECTS\",\"$HTTP_CODE\",\"$IS_REDIRECT\",\"$CHECK_TIME\"" >> "$OUTPUT_FILE"
# 杩涘害鎻愮ず
echo "[$counter] $url -> $FINAL_URL (鐘舵€佺爜: $HTTP_CODE, 璺宠浆娆℃暟: $NUM_REDIRECTS)"
# 閬垮厤璇锋眰杩囧揩琚皝锛屾瘡娆℃娴嬪悗sleep 1绉? sleep 1
done < "$INPUT_FILE"
echo ""
echo "========================================"
echo "鎵归噺妫€娴嬪畬鎴愶紒"
echo "鍏辨娴?$counter 涓猆RL"
echo "缁撴灉宸蹭繚瀛樺埌: $OUTPUT_FILE"
echo "========================================"
浣跨敤杩欎釜鑴氭湰闇€瑕佸厛鍑嗗涓€涓猔urls.txt`鏂囦欢锛屾瘡琛屼竴涓猆RL锛?
https://www.example.com
https://blog.example.com
https://shop.example.com
https://example.com/old-page
## 鑴氭湰涓夛細涓撲笟鐗堚€斺€斿苟琛屾娴?JSON涓棿鏍煎紡+CSV鏍煎紡鍖?
濡傛灉浣犺妫€娴嬬殑URL鏁伴噺寰堝ぇ锛堟瘮濡傚嚑鐧句笂鍗冧釜锛夛紝涓茶妫€娴嬩細闈炲父鎱€傝繖涓増鏈紩鍏ュ苟琛屾娴嬶紝骞朵笖鍏堢敤JSON鏍煎紡瀛樺偍涓棿缁撴灉锛屾渶鍚庡啀缁熶竴杞崲鎴怌SV锛?
#!/bin/bash
# 涓撲笟鐗堬細骞惰鎵归噺妫€娴嬮噸瀹氬悜锛孞SON涓棿鏍煎紡锛屾渶鍚庤浆CSV
# 鐢ㄦ硶锛?/pro_batch_check.sh urls.txt [骞惰鏁癩
INPUT_FILE="$1"
PARALLEL="${2:-5}" # 榛樿骞惰5涓?TEMP_DIR=$(mktemp -d)
JSON_FILE="$TEMP_DIR/results.json"
CSV_FILE="redirect_pro_$(date +%Y%m%d_%H%M%S).csv"
if [ -z "$INPUT_FILE" ] || [ ! -f "$INPUT_FILE" ]; then
echo "鐢ㄦ硶: $0 [骞惰鏁癩"
exit 1
fi
echo "寮€濮嬫壒閲忔娴嬶紝骞惰鏁? $PARALLEL"
echo "涓存椂鐩綍: $TEMP_DIR"
# 璁℃暟鍣?counter=0
job_count=0
# 閫愪釜鎻愪氦curl妫€娴嬩换鍔★紙鍚庡彴骞惰鎵ц锛?while IFS= read -r url || [ -n "$url" ]; do
[[ -z "$url" || "$url" =~ ^# ]] && continue
((counter++))
((job_count++))
# 鍚庡彴鎵цcurl妫€娴? {
RESULT=$(curl -L --max-redirs 10 -s -o /dev/null \
-w "%{url_effective}%{num_redirects} %{http_code}" \
"$url" 2>/dev/null)
FINAL_URL=$(echo "$RESULT" cut -d' ' -f1)
NUM_REDIRECTS=$(echo "$RESULT" cut -d' ' -f2)
HTTP_CODE=$(echo "$RESULT" cut -d' ' -f3)
CHECK_TIME=$(date "+%Y-%m-%d %H:%M:%S")
# 杈撳嚭缁撴灉鍒颁复鏃舵枃浠讹紙鐢▅鍒嗛殧锛岄伩鍏岰SV杞箟闂锛? echo "$counter$url|$FINAL_URL|$NUM_REDIRECTS|$HTTP_CODE $CHECK_TIME" > "$TEMP_DIR/result_$counter.txt"
} &
# 鎺у埗骞惰鏁? if [ $job_count -ge $PARALLEL ]; then
wait
job_count=0
fi
done < "$INPUT_FILE"
# 绛夊緟鎵€鏈夊悗鍙颁换鍔″畬鎴?wait
# 鐢熸垚CSV鏂囦欢
echo "搴忓彿,鍒濆URL,鏈€缁圲RL,璺宠浆娆℃暟,鏈€缁堢姸鎬佺爜,妫€娴嬫椂闂? > "$CSV_FILE"
for f in $(ls "$TEMP_DIR"/result_*.txt 2>/dev/null | sort -t_ -k2 -n); do
line=$(cat "$f")
counter=$(echo "$line" cut -d' ' -f1)
url=$(echo "$line" cut -d' ' -f2)
final_url=$(echo "$line" cut -d' ' -f3)
num_redirects=$(echo "$line" cut -d' ' -f4)
http_code=$(echo "$line" cut -d' ' -f5)
check_time=$(echo "$line" cut -d' ' -f6)
echo "\"$counter\",\"$url\",\"$final_url\",\"$num_redirects\",\"$http_code\",\"$check_time\"" >> "$CSV_FILE"
done
# 娓呯悊涓存椂鐩綍
rm -rf "$TEMP_DIR"
echo ""
echo "========================================"
echo "骞惰鎵归噺妫€娴嬪畬鎴愶紒"
echo "鍏辨娴?$counter 涓猆RL"
echo "缁撴灉宸蹭繚瀛樺埌: $CSV_FILE"
echo "========================================"
杩欎釜鐗堟湰鐨勬牳蹇冩敼杩涳細
1. **骞惰妫€娴?*锛氶€氳繃鍚庡彴杩涚▼瀹炵幇骞惰锛屽ぇ骞呮彁鍗囨娴嬮€熷害
2. 涓棿鏍煎紡锛氬厛鐢╜|`鍒嗛殧鐨勪复鏃舵枃浠跺瓨鍌ㄧ粨鏋滐紝閬垮厤鐩存帴鍦ㄥ悗鍙拌繘绋嬮噷鍐機SV閫犳垚鐨勬枃浠剁珵浜夐棶棰?3. **鐏垫椿鎺у埗骞惰鏁?*锛氱浜屼釜鍙傛暟鍙互鎸囧畾骞惰鏁帮紝鏍规嵁鐩爣鏈嶅姟鍣ㄧ殑鎵垮彈鑳藉姏璋冩暣
## 鐢≒owerShell瀹炵幇Windows鐗堟湰
濡傛灉浣犲湪Windows鐜涓嬪伐浣滐紝鍙互鐢≒owerShell瀹炵幇绫讳技鐨勫姛鑳斤細
# PowerShell鐗堟湰锛氭壒閲忔娴嬮噸瀹氬悜骞惰緭鍑篊SV
# 鐢ㄦ硶锛?\Check-Redirect.ps1 -UrlList urls.txt
param(
[string]$UrlList = "urls.txt",
[string]$OutputFile = "redirect_results.csv"
)
if (-not (Test-Path $UrlList)) {
Write-Host "鏂囦欢涓嶅瓨鍦? $UrlList" -ForegroundColor Red
exit 1
}
# 鍐欏叆CSV琛ㄥご
"搴忓彿,鍒濆URL,鏈€缁圲RL,璺宠浆娆℃暟,鏈€缁堢姸鎬佺爜,妫€娴嬫椂闂? | Out-File -FilePath $OutputFile -Encoding UTF8
$counter = 0
Get-Content $UrlList Where-Object { $_ -match '^https?://' } ForEach-Object {
$url = $_
$counter++
try {
# 浣跨敤Invoke-WebRequest璺熼殢閲嶅畾鍚? $response = Invoke-WebRequest -Uri $url -MaximumRedirection 10 -ErrorAction Stop
$finalUrl = $response.BaseResponse.ResponseUri.AbsoluteUri
$statusCode = $response.StatusCode
$numRedirects = ($response.RelationLinks.Count) # PowerShell涓嶇洿鎺ユ彁渚涜烦杞鏁?
$checkTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
# 鍐欏叆CSV
"`"$counter`",`"$url`",`"$finalUrl`",`"$numRedirects`",`"$statusCode`",`"$checkTime`"" | Out-File -FilePath $OutputFile -Encoding UTF8 -Append
Write-Host "[$counter] $url -> $finalUrl (鐘舵€佺爜: $statusCode)" -ForegroundColor Green
}
catch {
Write-Host "[$counter] $url 妫€娴嬪け璐? $_" -ForegroundColor Red
"`"$counter`",`"$url`",`"妫€娴嬪け璐",`"`",`"閿欒`",`"$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')`"" | Out-File -FilePath $OutputFile -Encoding UTF8 -Append
}
Start-Sleep -Milliseconds 500
}
Write-Host "妫€娴嬪畬鎴愶紝鍏?$counter 涓猆RL锛岀粨鏋滀繚瀛樺湪 $OutputFile" -ForegroundColor Cyan
娉ㄦ剰锛歅owerShell鐨刞Invoke-WebRequest`鍜宑url鍦ㄩ噸瀹氬悜澶勭悊涓婃湁浜涘樊寮傘€俙Invoke-WebRequest`浼氳嚜鍔ㄨ窡闅忛噸瀹氬悜锛屼絾涓嶅儚curl閭f牱鐩存帴鎻愪緵`num_redirects`杩欐牱鐨勫彉閲忋€傚鏋滈渶瑕佺簿纭幏鍙栬烦杞鏁帮紝寤鸿鍦╓indows涓婂畨瑁匞NU curl銆?
## CSV鏍煎紡鍖栫殑鏈€浣冲疄璺?
杈撳嚭CSV鏃讹紝鏈夊嚑涓潙闇€瑕佹敞鎰忥細
### 1. 瀛楁涓寘鍚€楀彿鎬庝箞鍔烇紵
濡傛灉URL鎴栧叾浠栧瓧娈典腑鍖呭惈閫楀彿锛屽繀椤荤敤鍙屽紩鍙锋妸鏁翠釜瀛楁鍖呰9璧锋潵锛?
# 閿欒绀鸿寖锛圲RL涓湁閫楀彿浼氱牬鍧廋SV缁撴瀯锛?echo "$url,$final_url,$code" >> output.csv
# 姝g‘绀鸿寖锛堢敤鍙屽紩鍙峰寘瑁瑰瓧娈碉級
echo "\"$url\",\"$final_url\",\"$code\"" >> output.csv
### 2. 瀛楁涓寘鍚弻寮曞彿鎬庝箞鍔烇紵
濡傛灉瀛楁鍐呭鏈韩鍖呭惈鍙屽紩鍙凤紝闇€瑕佹妸鍙屽紩鍙疯浆涔夋垚涓や釜鍙屽紩鍙凤紙CSV鏍囧噯锛夛細
# 濡傛灉URL涓寘鍚弻寮曞彿锛堣櫧鐒舵瀬灏戣锛?url=$(echo "$url" | sed 's/"/""/g')
### 3. 鐢‥xcel鎵撳紑涓枃CSV涔辩爜鎬庝箞鍔烇紵
Windows涓嬬殑Excel榛樿浣跨敤GBK缂栫爜鎵撳紑CSV锛岃€屾垜浠殑鑴氭湰鐢熸垚鐨凜SV鏄疷TF-8缂栫爜鐨勶紝鎵€浠ヤ細涔辩爜銆?
瑙e喅鏂规硶鏄湪CSV鏂囦欢寮€澶村姞涓夿OM锛圔yte Order Mark锛夛細
# 鐢熸垚甯OM鐨刄TF-8 CSV锛圗xcel鍙互姝g‘璇嗗埆锛?echo -ne "\xEF\xBB\xBF搴忓彿,鍒濆URL,鏈€缁圲RL,璺宠浆娆℃暟,鐘舵€佺爜\n" > output.csv
鎴栬€呯敤PowerShell鐢熸垚CSV鏃舵寚瀹氱紪鐮侊細
# PowerShell鎸囧畾UTF-8 with BOM缂栫爜
$data | Export-Csv -Path output.csv -Encoding UTF8
## 鐩稿叧鏂囩珷鎺ㄨ崘
濡傛灉浣犲curl閲嶅畾鍚戞娴嬬殑鍏朵粬鎶€宸ф劅鍏磋叮锛屽彲浠ョ湅鐪嬭繖鍑犵瘒鏂囩珷锛?
- [curl鎵归噺妫€娴嬬綉绔欒烦杞鏁拌剼鏈細3涓疄鎴樿剼鏈閲嶅畾鍚戦摼璺棤澶勫彲钘廬(https://youres.cn/?id=1492)鈥斺€旀繁鍏ヨ瑙e浣曠敤curl鎵归噺妫€娴嬭烦杞鏁?- [curl -w num_redirects閰嶅悎url_effective杩借釜瀹屾暣璺宠浆閾捐矾锛?涓疄鎴樺満鏅交搴曟悶瀹歖(https://youres.cn/?id=1489)鈥斺€旇瑙um_redirects鍜寀rl_effective鐨勭粍鍚堢敤娉?- [curl -w鏍煎紡鍖栬緭鍑洪噸瀹氬悜淇℃伅锛?涓疄鎴樻妧宸ц浣犵簿鍑嗚瘖鏂烦杞摼璺痌(https://youres.cn/?id=1449)鈥斺€旂郴缁熻瑙url -w鍙傛暟鐨勬牸寮忓寲杈撳嚭鎶€宸?
## 鎬荤粨
鎶奵url鎵归噺妫€娴嬮噸瀹氬悜鐨勭粨鏋滆緭鍑哄埌CSV锛屾牳蹇冨氨鏄笁姝ワ細
1. 鐢╜curl -L -w`鑾峰彇閲嶅畾鍚戠浉鍏冲彉閲忥紙`url_effective`銆乣num_redirects`銆乣http_code`锛?2. 鐢╜awk`/`cut`/`sed`绛夊伐鍏锋妸缁撴灉鏍煎紡鍖栨垚CSV鐨勪竴琛?3. 澶勭悊濂紺SV鐨勭壒娈婂瓧绗﹁浆涔夊拰缂栫爜闂锛岀‘淇濈敤Excel鎵撳紑姝e父
瀵逛簬灏忚妯℃娴嬶紙鍑犲崄涓猆RL锛夛紝鐢ㄨ繘闃剁増鑴氭湰灏卞浜嗐€傚鏋淯RL鏁伴噺寰堝ぇ锛屽缓璁敤涓撲笟鐗堣剼鏈苟琛屾娴嬶紝鑳借妭鐪佸ぇ閲忔椂闂淬€?
浣犲钩鏃舵槸鎬庝箞鎵归噺妫€娴嬮噸瀹氬悜鐨勶紵鏈夋病鏈夐亣鍒拌繃浠€涔堝潙锛熸杩庡湪璇勮鍖哄垎浜綘鐨勭粡楠屻€?
---
*鏈枃浠嬬粛鐨勮剼鏈潎鍦↙inux/macOS鐨刡ash鐜涓嬫祴璇曢€氳繃锛學indows鐢ㄦ埛鍙互浣跨敤WSL鎴栬€呭畨瑁匞NU curl鍚庝娇鐢ㄣ€?
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论