데스트탑 앱으로 티스토리 로그인하기

rlj1202의 이미지

티스토리에서 제공하는 API를 이용해서 글 목록을 가져오기 위해 Go언어로 작업을 하고 있었는데, 마지막에서 막혀서 이곳에 질문 드립니다.

일단 티스토리 로그인 홈페이지에 있는 form 에 어떤게 있는지 알아보니 다음과 같이 생겼더군요

간단하게만 나타내 보았습니다.

<form method="post" action="https://www.tistory.com/auth/login">
    <input name="loginId">
    <input name="password">
</form>

또한, 티스토리에서 저 형식으로 로그인 요청을 한 뒤에 쿠키에 있는 무슨 세션값이랑 비교를 해서 있으면 성공, 없으면 로그인이 만료됬다고 하면서 로그인이 되지 않아 일단 로그인 홈페이지에 접속을 요청해서 쿠키값을 만들어 놓고 로그인 요청을 보냅니다.

여기까지는 되는데 그 이후가 문제입니다. 분명히 아이디와 패스워드 값을 제대로 주었는데도 일치하지 않는다고 하는군요.

제가 의심해 보는것은 인코딩인데... url 인코딩이라는걸 한다더군요. "@"같은 기호를 %40으로 바꾸어서 보내고 등등... 그런데 이런게 Go 라이브러리에 구현되어있지 않을리가 없고 document 에서도 url-encoded 되서 보낸다 라고 쓰여있었습니다.

도움을 부탁드립니다!

cookies, err := cookiejar.New(nil)
if err != nil {
	panic(err)
}
 
client := new(http.Client)
client.Jar = cookies
 
resp, err := client.Get(postUrl)
 
resp, err = client.PostForm(postUrl, url.Values{
	"loginId": { loginId },
	"password": { password },
	"rememberLoginId": { "1" },
	"redirectUrl": { "http://www.tistory.com" },
})
if err != nil {
	panic(err)
}
defer resp.Body.Close()
 
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
	println("error")
	panic(err)
}
 
println(string(body))
peecky의 이미지

1. 로그인 할 때 아이디, 패스워드 외에도 추가적인 인증 값을 보내고 있습니다.

2. 티스토리쪽 API를 쓸려면 아이디/패스워드 로그인이 아니라 OAuth로 인증 토큰을 발급받아야 되지 않나요?

댓글 첨부 파일: 
첨부파일 크기
Image icon Screen Shot 2017-08-31 at 20.25.48.png133.39 KB
rlj1202의 이미지

OAuth로 인증토큰을 받기 위해 url을 보내면 티스토리 로그인 페이지로 리다이렉트 해서 로그인을 해야합니다. 그래서 먼저 티스토리 로그인 페이지에서 로그인을 한 뒤에 로그인 세션을 유지한 채로 access_token을 요청하려고 합니다.

그런데 1번에 추가적인 인증값이 무엇인가요? 제가 본 form에는 뭐 redirect_url이나 rememberId 같은 부가적인 값밖에 찾지 못했습니다.

peecky의 이미지

그러니까, 별도의 웹 서버 없이 OAuth 인증을 받으려는 건가요?

로그인시 추가적인 인증값은 첨부파일 하단에 Form Data에 있습니다.

rlj1202의 이미지

그 값이 무엇을 의미하는지는 모르시겠죠?
해당 값이 자바스크립트를 통해 추가 될수도 있나요?

peecky의 이미지

JavaScript로, 로그인 폼이 전송되기 직전에 form에 input hidden 등을 추가해서 추가적인 값을 보낼 수 있습니다.

T.p.top.auth.js 파일에

e.append("<input type='hidden' name='ofp' value='" + c + "'>");
e.append("<input type='hidden' name='nfp' value='" + d + "'>");

라는 내용이 있네요.
rlj1202의 이미지

Go언어에서는 html 파일을 받아만 올 뿐 자바스크립트를 실행하지 않아서 그런 내용이 보이지 않았던것 같습니다. 해결의 실마리를 찾은것 같네요. 감사합니다!

pynoos의 이미지

BlogAPI로 접근이 안되시면, TISTORY API를 이용하시는 것이 좋습니다.

http://www.tistory.com/guide/api/index

참고로 OAuth 로 연습해두시면, 카카오가 아닌 다른 서비스에서도 쉽게 비슷한 방법으로 구현가능합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.