Я пытаюсь подключить внешний API (требуется аутентификация) с данными LD-Json с другого URL.Не понимаю, как добавить ключ и пароль для этого внешнего API.Пытался использовать DefaultHttpClient, но он устарел.
Первый подход -
import java.nio.charset.StandardCharsets
import java.util.Base64
import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials}
import org.apache.http.client.methods.{HttpGet, HttpPost}
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.{BasicCredentialsProvider, DefaultHttpClient, HttpClientBuilder}
import org.jsoup.Jsoup
class Scraper(url: String) {
def getJson(url: String) = {
val doc = Jsoup.parse(url)
val api_url = "external_api"
val username = "my_username"
val password = "my_password"
val ldJsons = doc.select("script[type=\"application/ld+json\"]")
val base64EncodedDoc = Base64.getEncoder.encodeToString(doc.toString().getBytes(StandardCharsets.UTF_8))
val post = new HttpPost(api_url)
post.setHeader("Content-type", "application/json")
post.setEntity(new StringEntity(base64EncodedDoc))
val response = (new DefaultHttpClient).execute(post)
//need an alternative for this in Scala
}
}
Второй подход -
import java.nio.charset.StandardCharsets
import java.util.Base64
import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials}
import org.apache.http.client.methods.{HttpGet, HttpPost}
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.{BasicCredentialsProvider, DefaultHttpClient, HttpClientBuilder}
import org.jsoup.Jsoup
class Scraper(url: String) {
def getJson(url: String) = {
val doc = Jsoup.parse(url)
val api_url = "external_api"
val username = "my_username"
val password = "my_password"
val ldJsons = doc.select("script[type=\"application/ld+json\"]")
val base64EncodedDoc = Base64.getEncoder.encodeToString(doc.toString().getBytes(StandardCharsets.UTF_8))
val credentialsProvider = new BasicCredentialsProvider()
credentialsProvider.setCredentials(
AuthScope.ANY,
new UsernamePasswordCredentials(username, password)
)
val httpClient =
HttpClientBuilder.create()
.setDefaultCredentialsProvider(credentialsProvider)
.build()
val httpResponse = new HttpGet(api_url)
httpResponse.setHeader("Content-type", "application/json")
httpClient.execute(httpResponse)
//how to pass my LD-Json data here?
}
}
Это мой первый вопрос здесь.Если это слишком тривиально, пожалуйста, извините.Я пытаюсь написать класс скребка в Scala, который извлекает LD-Json из URL и публикует его во внешнем API.