Browse Source

link_checker: Set Accept header

As mentioned in #381, crates.io 404's any request without an Accept:
text/html header.  It 200's any request with one, but at least
false-successes don't prevent checking any other links.

This also makes it easier to add a custom User-Agent if desired.

rustfmt and fix a clippy nit (unnecessary return) while I'm here.
index-subcmd
Thomas Hurst 5 years ago
parent
commit
6a5ace62fc
1 changed files with 18 additions and 7 deletions
  1. +18
    -7
      components/link_checker/src/lib.rs

+ 18
- 7
components/link_checker/src/lib.rs View File

@@ -2,11 +2,11 @@ extern crate reqwest;
#[macro_use]
extern crate lazy_static;

use reqwest::header::{qitem, Accept, Headers};
use reqwest::{mime, StatusCode};
use std::collections::HashMap;
use std::error::Error;
use std::sync::{Arc, RwLock};
use reqwest::StatusCode;


#[derive(Clone, Debug, PartialEq)]
pub struct LinkResult {
@@ -54,19 +54,30 @@ pub fn check_url(url: &str) -> LinkResult {
}
}

let mut headers = Headers::new();
headers.set(Accept(vec![qitem(mime::TEXT_HTML), qitem(mime::STAR_STAR)]));

let client = reqwest::Client::new();

// Need to actually do the link checking
let res = match reqwest::get(url) {
Ok(response) => LinkResult { code: Some(response.status()), error: None },
Err(e) => LinkResult { code: None, error: Some(e.description().to_string()) },
let res = match client.get(url).headers(headers).send() {
Ok(response) => LinkResult {
code: Some(response.status()),
error: None,
},
Err(e) => LinkResult {
code: None,
error: Some(e.description().to_string()),
},
};

LINKS.write().unwrap().insert(url.to_string(), res.clone());
return res;
res
}

#[cfg(test)]
mod tests {
use super::{LINKS, check_url};
use super::{check_url, LINKS};

#[test]
fn can_validate_ok_links() {


Loading…
Cancel
Save