title: How can I login to instagram using php and curl and get a sessionid?
body: <p>I am using this PHP code found in the answer on this question :
  <a href="https://stackoverflow.com/questions/26003063/instagram-login-programmatically">Instagram login programmatically</a>
  When I check the cookie.txt sessionid is "" . is there a way I can change this code to make it get a sessionid cookie ? csrftoken,rur,mid,urlgen all seem to be set correctly but I dont know...I need the sessionid to explore tags programmatically.</p>
  
  <p>EDIT: The problem is for my username and password I am being directed to the "Suspicious Login Attempt" page.
  "We Detected An Unusual Login Attempt
  To secure your account, let us know if it was you"
  EDIT : one of my account works every time ,only the other shows the "Suspicious Login Attempt" page. ??? :/  ???</p>
  
  <p>what is that all about ?</p>
  
  <pre><code>$username = "yourname";
  $password = "yourpass";
  $useragent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/50.0.2661.102 Chrome/50.0.2661.102 Safari/537.36";
  $cookie=$username.".txt";
  
  @unlink(dirname(__FILE__)."/".$cookie);
  
  $url="https://www.instagram.com/accounts/login/?force_classic_login";
  
  $ch  = curl_init();        
  
  $arrSetHeaders = array(
      "User-Agent: $useragent",
      'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language: en-US,en;q=0.5',
      'Accept-Encoding: deflate, br',
      'Connection: keep-alive',
      'cache-control: max-age=0',
  );
  
  curl_setopt($ch, CURLOPT_HTTPHEADER, $arrSetHeaders);         
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__)."/".$cookie);
  curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__)."/".$cookie);
  curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  
  $page = curl_exec($ch);
  curl_close($ch);          
  
  // try to find the actual login form
  if (!preg_match('/&lt;form method="POST" id="login-form" class="adjacent".*?&lt;\/form&gt;/is', $page, $form)) {
      die('Failed to find log in form!');
  }
  
  $form = $form[0];
  
  // find the action of the login form
  if (!preg_match('/action="([^"]+)"/i', $form, $action)) {
      die('Failed to find login form url');
  }
  
  $url2 = $action[1]; // this is our new post url
  // find all hidden fields which we need to send with our login, this includes security tokens
  $count = preg_match_all('/&lt;input type="hidden"\s*name="([^"]*)"\s*value="([^"]*)"/i', $form, $hiddenFields);
  
  $postFields = array();
  
  // turn the hidden fields into an array
  for ($i = 0; $i &lt; $count; ++$i) {
      $postFields[$hiddenFields[1][$i]] = $hiddenFields[2][$i];
  }
  
  // add our login values
  $postFields['username'] = $username;
  $postFields['password'] = $password;   
  
  $post = '';
  
  // convert to string, this won't work as an array, form will not accept multipart/form-data, only application/x-www-form-urlencoded
  foreach($postFields as $key =&gt; $value) {
      $post .= $key . '=' . urlencode($value) . '&amp;';
  }
  
  $post = substr($post, 0, -1);   
  
  preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $page, $matches);
  
  $cookieFileContent = '';
  
  foreach($matches[1] as $item) 
  {
      $cookieFileContent .= "$item; ";
  }
  
  $cookieFileContent = rtrim($cookieFileContent, '; ');
  $cookieFileContent = str_replace('sessionid=; ', '', $cookieFileContent);
  
  $oldContent = file_get_contents(dirname(__FILE__)."/".$cookie);
  $oldContArr = explode("\n", $oldContent);
  
  if(count($oldContArr))
  {
      foreach($oldContArr as $k =&gt; $line)
      {
          if(strstr($line, '# '))
          {
              unset($oldContArr[$k]);
          }
      }
  
      $newContent = implode("\n", $oldContArr);
      $newContent = trim($newContent, "\n");
  
      file_put_contents(
          dirname(__FILE__)."/".$cookie,
          $newContent
      );    
  }
  
  $arrSetHeaders = array(
      'origin: https://www.instagram.com',
      'authority: www.instagram.com',
      'upgrade-insecure-requests: 1',
      'Host: www.instagram.com',
      "User-Agent: $useragent",
      'content-type: application/x-www-form-urlencoded',
      'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language: en-US,en;q=0.5',
      'Accept-Encoding: deflate, br',
      "Referer: $url",
      "Cookie: $cookieFileContent",
      'Connection: keep-alive',
      'cache-control: max-age=0',
  );
  
  $ch  = curl_init();
  curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__)."/".$cookie);
  curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__)."/".$cookie);
  curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $arrSetHeaders);     
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_REFERER, $url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post);        
  
  sleep(5);
  $page = curl_exec($ch);
  
  
  preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $page, $matches);
  $cookies = array();
  foreach($matches[1] as $item) {
      parse_str($item, $cookie1);
      $cookies = array_merge($cookies, $cookie1);
  }
  var_dump($page);      
  
  curl_close($ch);
  </code></pre>